Linux 命令之 sed

来源:互联网 发布:淘宝微任务 编辑:程序博客网 时间:2024/05/22 00:13

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

0 0
原创粉丝点击