sed: Stream EDitor,行编辑器
用法: sed [option]... 'script' inputfile...
script: '地址命令'

    常用选项: 
        -n: 不输出模式中的内容至屏幕
        -e: 多点编辑
        -f: /path/to/script_file:从指定文件中读取编辑脚本
        -r: 支持使用扩展正则表达式
        -i:原处编辑,慎用

        地址定界:
            1. 不给地址,对全文进行处理
            2.单地址
                #:指定的行
                /pattern/: 被此处模式所能匹配到的每一行
            3.地址范围:
                #,#
                #,+#
                /pat1/,/pat2/
            4.~:步进
                1~2
                2~2
    
编辑命令:
    d: 删除
        # sed /^UUID/d /tmp/fstab 删除UUID开头的行
        # sed '/^$/d' /tmp/fstab 删除空白行
        # sed '1,4d' /tmp/fstab
    p: 显示模式空间中的内容
        # sed '/^UUID/p' /tmp/fstab
        这样会显示两遍,默认会打印模式空间中的内容,可以使用-n不显示模式空间中的内容就只会输出一遍
    a \text: 在行后面追加文本,支持使用\n实现多行追加
        # sed '/^UUID/a \hello' /etc/fstab 在fstab中UUID行后面添加hello
    i \text: 在行前面插入文本,支持使用\n实现多行插入
        # sed '/^UUID/i \hello' /etc/fstab 在fstab中UUID行前面插入hello
    c \text: 替换行为单行或多行文本
        # sed '/^UUID/c \uuid' /etc/fstab 把fstab中UUID改为小写
    w /path/to/somefile: 保存模式空间匹配到的行至指定文件中
        # sed '/^UUID/w /etc/issue' /etc/fstab   读取fstab中符合UUID的行存放到issue中
    r /path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后
        # sed '6r /etc/issue' /etc/fstab 读取issue中的内容放到fstab中的第六行行后
    =: 为模式空间中的行打印行号
    !: 取反条件
    s///: 支持使用其他分隔符,s@@@,s###
        替换标记
            g: 行内全局替换
            p: 显示替换成功的行
            w /PATH/TO/SOMEFILE: 将替换成功的结果保存至指定文件中
                # sed 's@^UUID@uuid@' /tmp/fstab  UUID替换为小写

    练习1:删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符
            # sed 's@^[[:space:]]\+@@' /boot/grub/grub.conf
    练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 
            # sed 's@^#[[:space:]]\+@@' /etc/fstab   
    练习3:echo一个绝对路径给sed命令,取出其基名,取出其目录名
            # echo "/etc/home/dir/base.name/" | sed 's@[^/]\+/\?$@@'

高级编辑命令
    h: 模式空间中的内容覆盖至保持空间中
    H: 模式空间中的内容追加至保持空间中
    g: 保持空间中的内容覆盖至模式空间
    G: 保持空间中的内容追加至模式空间
    n: 读取匹配到的行的下一行覆盖至模式空间中
    N: 读取匹配到的行的下一行追加至模式空间中
    d: 删除模式空间中的行
    D: 删除多行模式空间中的所有行
    x: 把模式空间中的内容与保持空间中的内容互换

      举例:
            sed -n 'n;p' FILE:显示偶数行
    sed '1!G;h;$!d' FILE: 逆向显示文件内容
    sed '$!N;$!D' FILE:取出文件后两行
    sed '$!d' FILE: 取出文件最后一行
    sed 'G' FILE: 每行下面添加一个空白行
    sed '/^$/d;G' FILE 多个空白行合并成一个
    sed 'n;d' FILE: 显示奇数行
    sed -n '1!G;h;$p' FILE:逆向显示文件中的每一行
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。