Linux 命令之 sed

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章