sed
stream editor的缩写.
流编辑器,用程序的方式来编辑文本,相当的hacker啊。
sed基本上就是玩正则模式匹配,所以,玩sed的人,正则表达式一般都比较强。
AWK之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符, 是贝尔实验室1977年搞出来的文本出现神器, sed比awk还要年长2-3岁。
都称得上是上古神器。
下面学习几个sed常见使用:
测试使用的文本内容
[root@localhost]# cat sed.test
I love her.
I love her.
I love her.
I love her.
I love her.
I love her.
1. s 替换命令
a. 把文本中的her 替换成Joey
s表示替换命令,/her/表示匹配her,/Joey/表示把匹配替换成Joey,/g 表示替换行内所有的匹配
[root@localhost]# sed "s/her/Joey/g" sed.test
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
上面的sed命令并没有对文件的内容改变,只是把处理过后的内容输出界面
如果要修改所操作文件的内容,可以加上 -i 参数直接修改文件内容
sed -i “s/her/Joey/g” sed.test
b. 其他一些常用的匹配:
在每行最前面加#字符:
$ sed 's/^/#/g' sed.test
在每一行最后面加—:
sed 's/$/ --- /g' sed.test
c. 多行匹配
如果我们需要一次替换多个模式,可参看下面的示例:(第一个模式把第一行到第三行的I替换成Jobs,第二个则把第3行以后的I替换成了He also)
[root@localhost]# sed '1,3s/I/Jobs/g; 3,$s/I/He also/g' sed.test
Jobs love Joey.
Jobs love Joey.
Jobs love Joey.
He also love Joey.
He also love Joey.
He also love Joey.
我们可以使用 & 来当做被匹配的变量,然后可以在变量左右加点东西
[root@localhost ]# sed 's/Joey/{&}/g' sed.test
I love {Joey}.
I love {Joey}.
I love {Joey}.
I love {Joey}.
I love {Joey}.
I love {Joey}.
d. a命令和i命令
a命令就是append, i命令就是insert,它们是用来添加行的。
在第一行插入
[root@localhost ]# sed "1 i ------------insert---------------- " sed.test
------------insert----------------
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
在最后一行插入
[root@localhost ]# sed "$ a ------------insert---------------- " sed.test
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
------------insert----------------
如果不指定位置,则每一行后面都会添加一行
e. 删除匹配行 d命令
[root@localhost]# cat sed.test
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
------------insert----------------
[root@localhost]# sed '/insert/d' sed.test
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
f. 打印命令 p命令
使用 -n 可以只输出匹配的行,就像linux 的grep 命令
如果不使用-n则未匹配的正常输出,匹配的输出两次
[root@localhost luffy]# sed -n '/Joey/p' sed.test
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
I love Joey.
http://coolshell.cn/articles/9104.html
http://sed.sourceforge.net/sed1line_zh-CN.html