本節書摘來自華章出版社《建構高可用linux伺服器 第3版》一 書中的第3章,第3.2節,作者:餘洪春 ,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
sed是linux/unix平台下的輕量級流編輯器,日常一般用于處理文本檔案。sed有許多很好的特性。首先,它相當小巧;其次,sed可以配合強大的shell來完成許多複雜的功能。在我看來,sed完全可以被看成是一個腳本解釋器,它用類似于程式設計的手段完成許多事情。我們完全可以用vim+sed的方式來處理日常工作中的大多數文檔。
sed的格式如下所示:
sed [-nefr] [n1,n2] action
其中:
-n:是安靜模式,隻有經過sed處理的行才顯示出來,其他不顯示。
-e:表示直接在指令行模式上進行sed的操作,是預設選項,不用寫。
-f:将sed的操作寫在一個檔案裡,用的時候“-f filename”就可以按照内容進行sed操作了。
-r:表示使sed支援擴充正規表達式。
n1,n2:不一定需要,選擇要進行處理的行。如10,20表示在10~20行之間處理。
sed的action(動作)支援如下參數。
a:表示添加,後接字元串,添加到目前行的下一行。
c:表示替換,後接字元串,用它替換n1到n2之間的行。
d:表示删除符合模式的行,它的文法為sed '/regexp/d',斜杠之間是正規表達式,模式在d前面,d後面一般不接任何内容。
i:表示插入,後接字元串,添加到目前行的上一行。
p:表示列印,列印某個選擇的資料,通常與-n安靜模式一起使用。
s:表示搜尋,還可以替換,類似于vim裡的搜尋替換功能。例如:1,20s/old/new/g表示替換1~20行的old為new,g在這裡表示處理這一行所有比對的内容。
注意 動作最好用''括起來,防止因空格導緻錯誤。
sed執行個體如下所示(下面所有執行個體在centos 5.8_x64下已認證):
1)顯示passwd内容,将2~5行删除後顯示。
cat -n /etc/passwd |sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 games:x:5:60:games:/usr/games:/bin/sh
7 man:x:6:12:man:/var/cache/man:/bin/sh
8 lp:x:7:7:lp:/var/spool/lpd:/bin/sh
...
2)在第2行後面的一行加上“hello china!”字元串。
cat -n /etc/passwd |sed '2a hello china!'
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
hello china!
3)在第2行後面一行加上兩行字,例如:“this is first line!”和“this is second line!”。
cat -n /etc/passwd |sed '2a this is first line! \ //使用續航符\後按回車輸入後續行
this is second line!'// 以' 結尾再按Enter鍵結束
1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
this is first line!
this is second line!
3 bin:x:2:2:bin:/bin:/bin/sh
4)将第2~5行的内容替換成“我是大好人!”。
cat -n /etc/passwd | sed '2,5c 我是大好人!'
我是大好人!
5)隻顯示第5~7行,注意p與-n的配合使用!
cat -n /etc/passwd |sed -n '5,7p'
5 sync:x:4:65534:sync:/bin:/bin/sync
6)使用ifconfig列出ip,我們隻想要eth0的ip位址。可以先用grep取出有ip的那一行,然後用sed去掉(替換成空)ip前面和後面的内容,如下所示: