grep工具的功能其实还不够强大,grep实现的只是查找功能,而它却不能实现把查找的内容替换掉。以前用vim的时候,可以查找也可以替换,但是只局限于在文本内部来操作,而不能输出到屏幕上。sed工具以及下面要讲的awk工具就能实现把替换的文本输出到屏幕上的功能了,而且还有其他更丰富的功能。sed和awk都是流式编辑器,是针对文档的行来操作的。
<code>sed -n '/root/'p 1.txt</code> 匹配含有root的行,同时也支持. + ? | {} []
<code>sed -n 'n'p 1.txt</code> 打印第n行
<code>sed -e '1'p -e '/bus/'p -n 1.txt</code> -e表示一条命令内不止有一个动作,打印出第一行的同时,在匹配bus字符
<code>sed</code> -n '/bus/'Ip passwd<code>` 匹配到大小写的bus I不区分大小写<br/></code>sed -i '1,10'd passwd <code>-i会直接修改文件,所以建议在用的时候先保存文件,删除1-10行,<br/></code>sed -i '/user2/'d passwd ` 删除user2匹配到的行
<code>sed '1,10s/root/toor/g passwd</code> 将1-10行的root替换成toor,g全局替换,不加的话只替换每一行第一个
需求:第一段和最后一段替换位置
head passwd |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:1/'
第一段:中间段:最后一段
head passwd |sed 's/\/root/123/g' 加s调换两个字符或字符串的位置将root换成123
head passwd |sed 's/\/sbin/nologin/123/g' 将sbin/nologin 换成123
head passwd |sed 's/[a-zA-Z]//g' 将所有的英文字符删除,也就是替换为空
head passwd |sed -r 's/(.)/aaa:&/' 在所有的第一列前面加上aaa,&表示前面的(),
也可以写成
[root@localhost sed]# head passwd |sed -r 's/(.)/aaa:\1/'
本文转自 小新锐 51CTO博客,原文链接:http://blog.51cto.com/13407306/2044084,如需转载请自行联系原作者