sed基本语法

作者: 孙成龙 | 来源:发表于2016-10-10 21:20 被阅读164次

    大部分整理自鸟哥私房菜

    使用方法

    sed [ -nefr] [n1,n2] acction 
    
    -n: 是安静模式,只有经过sed处理的行才会显示,其他不现实
    -e: 表示直接在命令行上执行。是默认选项不用填写。
    -f: 将Sed的操作写在一个文件里面,用的时候-f filename 就可以按照内容进行Sed操作
    -r:表示支持扩展正则表达式,默认支持基础正则表达式
    -i: 直接修改读取的文件内容,而不是由文件输出
    n1,n2 代表的是行数
    
    • Sed的action (动作)支持如下参数
    a: 表示添加,后接字符串,添加到当前行的下一行
    c:表示替换,后接的字符串,用它来替换N1到N2之间的行
    d:删除行
    i:表示插入,后街字符串,添加到当然行的上一行
    p:表示打印和-n一起使用
    s: 表示搜索,还可以替换1,20s/old/new/g表示把1到20行的old换成new
    

    正则替换

    sed 's/要被替换的字符串/新的字符串/g'
    

    使用示例

    • 将old 替换为 new
    echo "old new djkalfja" | sed '1,20s/old/new/g'
    echo "old new djkalfja" | sed 's/old/new/g'
    
    • \ 与 /
    • 测试echo
       echo "\\\\///"
    
       \\///
    
    • 将\替换为/
       echo "\\\\///" | sed 's#\\#/#g'
     
       /////
    
    • 将/替换为\
    echo "\\\\///" | sed 's#/#\\#g'
    
        \\\\\
    
    • 查看密码文件
    nl /etc/passwd | head -5
    
     1 root:x:0:0:root:/root:/bin/bash
    2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    3 bin:x:2:2:bin:/bin:/usr/sbin/nologin
    4 sys:x:3:3:sys:/dev:/usr/sbin/nologin
    5 sync:x:4:65534:sync:/bin:/bin/sync
    
    • 增加功能
    nl /etc/passwd | head -5 | sed '2,4a hello\nworld'
    
     1 root:x:0:0:root:/root:/bin/bash
    2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    hello
    world
    3 bin:x:2:2:bin:/bin:/usr/sbin/nologin
    hello
    world
    4 sys:x:3:3:sys:/dev:/usr/sbin/nologin
    hello
    world
    5 sync:x:4:65534:sync:/bin:/bin/sync
    
    • 删除功能
      nl /etc/passwd | head -5 | sed '2,4d'
      
      

    1 root:x:0:0:root:/root:/bin/bash
    5 sync:x:4:65534:sync:/bin:/bin/sync
    ```

    • 按行修改
         nl /etc/passwd | head -5 | sed '2,4c No 2-4 number'
        
      1 root:x:0:0:root:/root:/bin/bash
        No 2-4 number
         5 sync:x:4:65534:sync:/bin:/bin/sync
    
    • 打印功能
        nl /etc/passwd | head -5 | sed -n '2,4p'
         
         2  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
         3  bin:x:2:2:bin:/bin:/usr/sbin/nologin
         4  sys:x:3:3:sys:/dev:/usr/sbin/nologin
    
    • eth0网卡 ip 提取

      • 查看eth0信息
    ifconfig eth0
    
    • 信息如下
    eth0 Link encap:Ethernet HWaddr b8:ae:ed:db:dd:2f
    inet addr:192.168.1.82 Bcast:192.168.1.255 Mask:255.255.255.0
    inet6 addr: fe80::baae:edff:fedb:dd2f/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:1817953 errors:0 dropped:23976 overruns:0 frame:0
    TX packets:162649 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:461052740 (461.0 MB) TX bytes:22537583 (22.5 MB)
    
    • 获取192.168.1.82这个ip
    ifconfig eth0 | grep 'inet addr:' | sed 's/^.*addr://g' | sed 's/ Bcast.*$//g'
    
    • 综合运用
    • 删除 manpath.config这个文件中没有注释的MAN的行,并且显示
    cat /etc/manpath.config | grep "MAN" | sed 's/^#.*$//g' | sed '/^$/d' | head -5
    
       MANDATORY_MANPATH /usr/man
    MANDATORY_MANPATH /usr/share/man
    MANDATORY_MANPATH /usr/local/share/man
    MANPATH_MAP /bin /usr/share/man
    MANPATH_MAP /usr/bin /usr/share/man
    
    • 修改文件内容
      • 将结尾的.换成!
    sed -i 's/\.$/\!/g' test.txt
    
    • 在文档最后一行增加Hello world!
    sed -i 'a Hello world!' test.txt
    

    vim中sed使用

    • 将rep 10替换为rep 100, 一个一个替换
    :1,$s/rep 10/rep 100/gc
    
    • 将\替换为/,一个一个替换
    :1,$s#\\#/#gc
    

    相关文章

      网友评论

        本文标题:sed基本语法

        本文链接:https://www.haomeiwen.com/subject/hbtisttx.html