sed,Stream editor的缩写,功能很强大,可以进行文本替换删除打印等,与grep、awk不同的是,它侧重点在于整行的编辑;

它的工作过程是,首先将文件分成以行为单位,然后将每一行逐次的放入缓冲区(模式空间),sed将其处理完毕后发送到标准输出,处理完最后一行sed便运行结束。由于sed是对存储在缓冲区的文件进行辑,因此,sed不会修改或者损坏正在编辑的文件。


sed的用法: sed [OPTION]... 'script' [input-file]...


sed的选项参数比较少,主要有这么几个:

  -n, --quiet,--silent:对不能匹配模式的行,默认不输出到屏幕

  -e script, --expression=script:多条件编辑

  -f,script-file, --file=script-file:从指定的script-file中读取脚本

      注意:最好用绝对路径

  -i[SUFFIX],--in-place[=SUFFIX]:在原文件直接进行编辑操作  不要轻易用

  -r, --regexp-extended:使sed支持扩展正则表达式


处理命令Command:

不同于grep的pattern,这里command不仅包含了正则表达式所匹配的模式,而且还包含了对匹配进行处理的命令。同时,sed的匹配是以‘/’开头和结尾的,中间包含着对文本的匹配模式,如/^less/就是匹配所有以less开头的行。而在匹配之后跟着的是对匹配结果的处理命令,例如/^less/d就是将所有以less开始的行删除;

命令有如下几个:

    =:显示被模式匹配的行的行号

      例如:sed -n '/^$/=' /etc/grub2.cfg

     a \text 追加

     i \text 插入

     c \text 替换

     d  在模式空间中删除被模式匹配的行;所以这样的行不能再进行标准输出

        注意:使用d命令的时候不要使用-n选项;

     p:显示模式空间中被模式匹配的行

          注意:通常搭配-n选项

     w filename:把匹配到的行另存到一个文件中

     r filename:将这个文件的内容追加到模式空间中被模式匹配的行之后

     !Command:在模式空间中被模式匹配的行

     s///:查找替换,分隔符可以任意更换,只要相同就可以

     s@@@,s###,s,,, ...

     s/pattren/text/[control]

      例如:sed s@/etc/fstab@/etc/mtab@

      pattren

      text:要替换成的内容,纯文本

      control:如何进行替换

        g:行内全部替换

        p:显示替换成功的行

        w file:保存到

举例:

删除包含root的行

sed '/root/d' file


删除从root行开始到whj行结束之间所有的行

# sed '/root/,/whj/d' file


删除第1行到第5行之间所有的行

# sed '1,5d' file


删除所有不包含Sam的行

# sed '/Sam/!d' file


将包含Sam行的love改成hate

# sed '/Sam/s/love/hate/g' file


删除每行后三个字符

# sed 's/...$//' file