天天看點

《建構高可用Linux伺服器 第3版》—— 3.2 Sed的基礎用法及實用舉例

本節書摘來自華章出版社《建構高可用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前面和後面的内容,如下所示:

繼續閱讀