文本处理工具sed

Posted

tags:

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

sed:stream Editor流编辑器,默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕。
语法:

    sed [option] ‘AddressCommand‘ file1 file2...

option选项有:

    -n :静默模式,不再显示模式空间的内容
    -i :直接修改源文件
    -r :使用扩展正则表达式

Address常用的匹配范围:

    1、startLine,endLine
            如:1,100 表示从第一行到100行,$表示最后一行
    2、/RegEXP/ 正则匹配,将匹配到的行显示出来
            如:/root/ 将匹配到有root的行显示
    3、/pattern1/,/pattern2/,从第一次匹配到pattern1开始到匹配到pattern2的行结束的中间的行
    4、LineNumber匹配指定的行
    5、startLine,+N,从startLine开始,往后的N行

command常用命令

    d:删除匹配到的行
    p:显示符合条件的行
    a string :在匹配当的行后面追加string的内容
    i string : 在匹配当的行前面添加string的内容
    r file :将file文件的内容添加到匹配到的行出
    w file :将匹配到的行添加到file文件中
    s/pattern/string/修饰符 :将匹配到的pattern替换成string,默认是替换第一个被匹配到的
                    常用的修饰符有:
                            i :忽略大小写
                            g :全局替换

如:
1、删除/etc/grub.conf文件中行首的空白符;

    sed -r ‘[email protected]^[[:spapce:]][email protected]@g‘ /etc/grub.conf

2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;

    sed ‘[email protected](id:)[0-9](:initdefault:)@15[email protected]‘ /etc/inittab

3、删除/etc/inittab文件中的空白行;

    sed ‘/^$/d‘ /etc/inittab

4、删除/etc/inittab文件中开头的#号;

    sed -r ‘[email protected]^#@@g‘ /etc/inittab

5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;

    sed -r ‘[email protected]^#[[:space:]][email protected]@g‘ /etc/inittab

6、删除某文件中以空白字符开头后面跟#类的行中的开头的空白字符及#号

    sed -r ‘[email protected]^[[:space:]]+#@@g‘ /etc/inittab

7、取出一个文件路径的目录名称;如取出/etc/inittab文件的目录,即/etc

    ##echo "/etc/rc.d/" | sed -r ‘[email protected]^(/.*/)[^/]+/[email protected][email protected]‘    

    echo ‘/etc/inittab‘ | sed -r ‘s#^(/.*)/(.*)#1#‘

基名/文件名:

    echo "/etc/rc.d/" | sed -r ‘[email protected]^/.*/([^/]+)/[email protected][email protected]‘

    echo ‘/etc/inittab‘ | sed -r ‘s#^(/.*)/(.*)#2#‘

需要注意的是,如果要替换原文见的内容要加 -i 参数,sed 中的///,可以使用###或@@@等字符代替。
p的 command参数也要注意下,匹配到的行将会显示两次,没匹配到的显示一次,如果显示两次的,第一次是 p的的作用将匹配到的行打印出来,第二次是sed命令的作用,会将模式空间的内容显示出来,所以说没匹配到的也会显示一次,如果想只显示一次可以加 -n 参数,那么sed命令中模式空间的内容不显示。

以上是关于文本处理工具sed的主要内容,如果未能解决你的问题,请参考以下文章

文本处理工具之---sed

sed文本处理工具

Sed文本处理工具

运维学习之sed文本处理工具

文本处理工具sed

Linux文本处理工具sed