sed 流编辑器

Posted liy36

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed 流编辑器相关的知识,希望对你有一定的参考价值。

sed

逐行读取内容到模式空间内,进行匹配编辑操作,若不匹配直接输出到屏幕

常用选项:
    -n 不输出模式空间的内容到屏幕
    -e 可以指定多个编辑命令
    -f /PATH/TO/SED_SCRIPT_FILE
        每行一个编辑命令
    -r 支持扩展正则表达式
    -i 直接编辑源文件

地址定界:
    1) 不提供地址: 对全文进行处理(空地址)
    2) 单地址:
        # 指定行
        /pattern/ :被此模式匹配到的每一行
    3) 地址范围:
        num1,num2 起始行到结束行
        num1,+num2 起始行+#行
        num,/pattern/ #开始到/pattern/结束
        /pattern/,/pattern/
    4) 步进 ~
        1~2 表示从第一行开始,每次前进2行 所有奇数行
        
        [root@node1 network-scripts]# cat -n ifcfg-ens33 
             1  TYPE=Ethernet
             2  BOOTPROTO=static
             3  DEFROUTE=yes
             4  NAME=ens33
             5  DEVICE=ens33
             6  ONBOOT=yes
             7  IPADDR=172.20.1.11
             8  NETMASK=255.255.255.0
             9  GATEWAY=172.20.1.254
        [root@node1 network-scripts]# sed -n '1~2p'  ifcfg-ens33 
            TYPE=Ethernet
            DEFROUTE=yes
            DEVICE=ens33
            IPADDR=172.20.1.11
            GATEWAY=172.20.1.254
        [root@node1 network-scripts]# sed -n '2~2p'  ifcfg-ens33  
            BOOTPROTO=static
            NAME=ens33
            ONBOOT=yes
            NETMASK=255.255.255.0
    
编辑命令:
    d 删除匹配到的行
        sed '1,8d' /etc/fstab
        
    p 打印匹配到的行
        sed -n '1~2p' /etc/fstab
        
    a 在匹配到的行后追加文本,支持使用
实现多行追加
        sed  '${num1}a 
ew line' /etc/fstab
        
    i 在模式匹配到的行前面插入文本
        sed  '${num1}i 
ew line' /etc/fstab
        
    c 	ext 把匹配到的行替换成text 内容
        sed  '/fstab/c 
ew line' /etc/fstab
        
    w /PATH/TO/SOMEFILE 保存匹配到的行到指定文件中
        sed '/^[^#]/w /tmp/fstab' /etc/fstab 
        
    r /PATH/FROM/SOMEFILE 读取指定文件到匹配到的行后面,实现文件合并     
        sed '3r /etc/issue' /etc/fstab
    
    = 为匹配到的行打印行号
        sed '/^UUID/=' /etc/fstab
    ! 条件取反
        sed '/^#/!d' /etc/fstab
        sed '地址定界!编辑命令' 
    s/// 查找替换,分隔符可自行指定常用有s@@@,s###,s%%%
        替换标记
            g 全局替换
            w /PATH/TO/SOMEFILE 替换成功的结果保存至文件中
            p 只显示替换成功的行
        sed 's/^[[:space:]]+//' /etc/grub2.cfg
        sed 's/^#[[:space:]]*//' /etc/fstab
        sed -e 's/^#[[:space:]]*//' -e '/^UUID/d' /etc/fstab 
        
        ~]# echo /var/log/message/ |sed -r 's#[^/]+/?$##'
            /var/log/   
        
高级编辑命令
    h 把模式空间中的内容覆盖到保持空间
    H 把模式空间中的内容追加到保持空间
    g 把保持空间中的内容覆盖到模式空间
    G 把保持空间中的内容追加到模式空间
    x 把模式空间中的内容和保持空间互换
    n 覆盖读取匹配到行的下一行至模式空间
    N 追加读取匹配到行的下一行至模式空间
    d 删除模式空间中的行
    D 删除模式空间中的所有行
    
    
    
    sed -n 'n;p' /etc/fstab  # 显示偶数行
        读取第一行,执行n读取下一行到模式空间,p显示模式空间内容,循环往复
    sed '1!G;h;$!d' /etc/fstab
        逆序显示文件内容
    sed '$!d' FILE      
    
    

    

以上是关于sed 流编辑器的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本江湖秘籍只传有缘人——流编辑器“三剑客”之sed命令

sed流编辑器

sed:轻量级流编辑器

sed流编辑器

Linux sed 流编辑器

流编辑 -- sed