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 在可以...