根據鳥哥書籍學習 sed 工具的使用

2021-09-20 20:08:46 字數 4327 閱讀 7291

sed工具

[root@localhost ~]#sed   [-nefr]  [動作]

引數:-n  : 使用安靜模式。在一般sed用法中,所有來自stdin的資料一般都會列出到螢幕上。但是如果加上-n引數後,則只有經過sed特殊處理的那一行(操作)才會被列出來。

-e  :直接在命令列模式上進行sed的動作編輯。

-f  :直接將sed的動作寫在乙個檔案內,-f filename 則可以執行filename內的動作。

-r  :  sed的動作支援的是擴充套件型正規表示式的語法(預設是基礎正規表示式語法)。

-i  :  直接修改讀取的檔案內容,而不是由螢幕輸出。

動作說明: [n1 [,n2]]  function 

n1 , n2 : 不見得會存在,一般代表選擇進行動作的行數,舉例來說,如果我的動作是需要在10到20行之間進行的,則「10,20 [動作行為]」

function有下面這些引數:

a   :新增,a的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)

c   :替換,c後面可以接字串,這些字串可以替換n1,n2之間的行!

d   :刪除,因為是刪除,所以d後面通常不接任何引數。

i    :插入,i後面可以接字串,而這些字串會在新的一行出現(目前的上一行)。

p    :列印,也就是將某個選擇的資料列印出來。通常p會與引數sed –n 一起執行。

s    :替換,可以直接進行替換工作。通常這個s的動作可以搭配正規表示式!

以行為單位的新增/刪除功能

範例一:將passwd的內容列出並且列印行號,同時將2~5行刪除。

[root@localhost opt]# nl passwd

[root@localhost opt]#nl passwd | sed '2,5d'

[root@localhost opt]#nl passwd | sed '4,$d'

sed後面接的動作,請務必以』』兩個單引號括住。

如果題型變化,舉例來說,如果只要刪除第2行,可以使用nl passwd | sed 『2d』來完成,至於若要刪除第3行到最後一行,則是nl passwd | sed 『3,$d』,那個¥代表最後一行。

範例二:在第二行(即加在第三行)加上「drink tea?」字樣!

[root@localhost opt]#nl passwd|sed '2a drink tea?'

drink tea?

在a後面加上的字串已經出現在第2行後面。如果要加在第2行前面呢,nl passwd| sed 『2i drink tea?』

[root@localhost opt]#nl passwd | sed '2i drink tea?'

drink tea?

增加一行很簡單,那如果是要增加兩行以上呢。

範例三:在第二行後面加入兩行字,例如「drink tea or …….」與」drink beer?」

[root@localhost opt]#nl passwd | sed '2a drink tea ......\

> drink beer'

drink tea ......

drink beer

這個範例的重點是我們可以新增不只一行,可以新增加好幾行,但是每一行之間都必須以反斜槓「\」來進行新行的增加。所以,我們發現在第一行的後面就有\存在,那是一定要的。

以行為單位的替換與顯示功能

範例四:將2-5行的內容替換為「no 2-5 number」

[root@localhost opt]#nl passwd | sed '2,5c no number'

no number

通過這個方法我們就能夠將資料整行替換了。我們以前想要列出第11-20行,要通過head –n 20 |tail –n 10 之類的方法來處理,很麻煩。sed則可以簡單直接取出想要的幾行看看下面的例子。

範例五:僅列出passwd檔案內的第5-7行

[root@localhost opt]#nl passwd | sed -n '5,7p'

上述命令中有個重要的引數-n,按照說明檔案,這個-n代表的是「安靜模式」!那麼為什麼要使用安靜模式呢?你可以自行執行sed 『5,7p』就知道了(5-7行會重複輸出)。與沒有加上-n的引數時,輸出的資料可是差很多呢。你可以通過這個sed的以行為單位的顯示功能,就能將某個檔案內的某些行號查出來。

[root@localhost opt]# nl passwd | sed  '5,7p'

部分資料的查詢並替換功能

除了整行的處理模式之外,sed還可以用行為單位進行部分資料的查詢並替換功能。基本上sed的查詢與替換和vi非常類似,他有點像這樣:

sed 『s/要被替換的字串/新的字串/g』

下面舉例子:

步驟一:檢視原資訊,查詢ip

[root@localhost opt]# ifconfig eth0

eth0      link encap:ethernet  hwaddr 00:0c:29:82:6e:49  

inet addr:192.168.211.128  bcast:192.168.211.255  mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe82:6e49/64 scope:link

up broadcast running multicast  mtu:1500  metric:1

rx packets:8217 errors:0 dropped:0 overruns:0 frame:0

tx packets:5502 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000 

rx bytes:810496 (791.5 kib)  tx bytes:863585 (843.3 kib)

步驟二:利用關鍵字配合grep選取出關鍵的一行資料。

[root@localhost opt]# ifconfig eth0|grep 'inet addr'

inet addr:192.168.211.128  bcast:192.168.211.255  mask:255.255.255.0

步驟三:將ip前面的部分予以刪除

[root@localhost opt]# ifconfig eth0|grep 'inet addr'|sed 's/^.*addr://g'

192.168.211.128  bcast:192.168.211.255  mask:255.255.255.0

步驟四:將ip後面的部分予以刪除

[root@localhost opt]#ifconfig eth0| grep 'inet addr'| sed 's/^.*addr://g'|sed 's/bcast.*$//g'

192.168.211.128

再舉乙個例子

步驟一:先使用grep將關鍵字man所在行取出來

[root@localhost opt]# cat /etc/man.config | grep 'man'

# when manpath contains an empty substring), to find out where the cat

# every automatically generated manpath includes these fields

# and the mansect environment variable is not set (1x-8x sections are used by

步驟二:刪除掉批註之後的資料!

[root@localhost opt]# cat /etc/man.config | grep 'man'|sed 's/#.*//g'

步驟三:將空白行刪除掉

[root@localhost opt]# cat /etc/man.config | grep 'man'|sed 's/#.*//g'|sed '/^$/d'

直接修改檔案內容

sed也可以直接修改檔案內容。

[root@localhost opt]# sed -i '$a #this is a test' passwd

[root@localhost opt]# nl passwd | sed -n '$p'

這個sed不錯。大家可以學習一下。

鳥哥的linux學習筆記

linux 幫助指令 man info usr share doc man man 指令 檢視指令的使用方法。q 退出說明。info info 指令 檢視指令的使用方法。q 退出說明。各種軟體的幫助檔案 usr share doc 簡單的文字編輯器 nano nano file name 命令 ct...

鳥哥的網路學習筆記

一 學名 內部迴圈網路。二 lo網域用途 1 用來作為測試作業系統內部迴圈所用的網域。2 提供給系統內部原本就需要使用網路介面的服務 daemon 所使用。三 具體解釋 該網段在classa 127.0.0.0 8,預設的主機 localhost ip為 127.0.0.1。當啟動www伺服器,在個...

Linux下的sed工具及awk工具的使用

在linux下的sed工具和awk工具是最常用的文字處理工具,配合grep的使用將產生非常大的威力,下面就來說一下sed和awk的基礎用法,sed基本用法如下 sed命令的語法如下所示 sed nefr 動作 引數說明 n 使用安靜模式,一般所有來自stdin的資料會被列出到螢幕上,但是 n 在可以...