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