sed命令用法

Posted

tags:

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

注意:Linux三大文本查找工具:grep、sed、awk。

sed命令基本用法:

Stream EDitor:行编辑器;实现逐行处理文本;而全屏编辑器是vim。

工作特性:

并不处理文本文件本身,而是处理文件内容时,是逐行的把文本加载至内存空间中,在内存中完成处理,然后再输出到屏幕上,对sed而言,内存空间叫模式空间,可对文本行进行模式匹配后再做处理,sed有许多编辑命令。

sed命令默认不编辑原文件,仅对模式空间中的数据做处理,而后,处理结束后,将模式空间的内容显示至屏幕。

sed命令格式

sed [options] ‘AddressCommand‘ FILE ...

    -n:静默模式,不再默认显示模式空间中的内容;

     -i:直接修改原文件;

     -e ‘AddressCommand‘ -e ‘AddressCommand‘:同时执行多个编辑命令;

    -f /PATH/TO/SED_SCRIPT:把每一个编辑命令‘AddressCommand‘保存至文件中,从文件中读出编辑命令进行处理;

    -r:表示使用扩展的正则表达式;

Address:指定行的编辑范围,表示法为;

1、StartLine,EndLine:开始行,结束行;例如1,100

    $:最后一行,即倒数第一行;

    $-1:表示倒数第二行(存疑是否支持?);

2、/RegExp/:使用正则式匹配;例如:/^root/

3、/pattern1/,/pattern2/:表示第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束;例如sed ‘/oot/d‘ /etc/fstab表示删除文件中包含oot的行;

4、LineNumber:指定的行;

5、StartLine,+N:表示从StartLine开始,向后的N行;例如sed ‘1,+2d‘ /etc/fstab删除前3行;

Command:编辑命令

    d:删除符号条件的行;例如sed ‘1,2d‘ /etc/fstab表示删除文件的第1,2行,然后显示到屏幕;

    p:显示符号条件的行;例如sed ‘/^\//p /etc/fstab显示以/开头的行,则符合条件的行显示了2次,原因是因为原文件也显示了一次,匹配到的文件又显示了一次;可使用-n选项即sed -n ‘/^\//p /etc/fstab;

    a \string:在符合的行后面追加新行,内容为string;例如sed ‘ /^\//a \# hello word‘ /etc/fstab表示在以/开头的行下面加1行# hello word;

    如果加2行,则sed ‘/^\//a \# hello word\n# hello word‘ /etc/fstab

    \n:为换行;

    i \string:在符合的行前面添加新行,内容为string;

    r FILENAME:将指定的文件的内容添加至符合条件的行的下行;例如sed ‘2r /etc/issue‘ /etc/fstab表示把issue文件添加在第2行的下面(可用于合并文件);又例如sed ‘1,,2r /etc/issue‘ /etc/fstab

    w FILENAME:将指定范围内的内容另存至指定的文件中;例如sed -n ‘/oot/w /tmp/oot.txt‘ /etc/fstab表示匹配oot所在的行,另存为oot.txt文件中;

    s/pattern/string/:查找并替换,pattern可使用正则式,默认只替换每行中第一次被模式匹配到的字符串;例如sed ‘s/oot/OOT/‘ /etc/fstab表示查找oot替换为OOT;又例sed ‘s/^\//#/‘ /etc/fstab表示以/开头的行替换为#;又例sed ‘s/\//#/‘ /etc/fstab表示只替换每行中第一次被模式匹配到的字符串;

    加修饰符:

        g:全局替换;例如sed ‘s/\//#/g‘ /etc/fstab表示以/开头的行全局替换为#;

         i:忽略字符大小写;

    s///:也是使用其它分隔符,只要不与使用的字符串相同即可;例如[email protected]@@或s###,这样就避免了转义;

        引用符:&:表示引用模式匹配到的整个字符串,类似正则式中的分组;例如sed.txt文件内容为hello,like .hi,my love.;查找sed ‘s#l..e#&r#g‘ sed.txt结果为hello,liker.hi,my lover.或写为sed ‘s#\(l..e\)#\1r#g‘ sed.txt

例如:

history | sed ‘s#^[[:space:]]*##g‘ | cut -d‘ ‘ -f1表示删除开头的空白字符



以上是关于sed命令用法的主要内容,如果未能解决你的问题,请参考以下文章

linux shell sed命令用法

sed命令用法

Linux bash 文本处理命令awk,sed,grep 用法

sed基本用法

sed 命令用法

sed 命令用法