1. 程式人生 > >Linux shell命令--sed

Linux shell命令--sed

轉自:http://blog.csdn.net/wl_fln/article/details/7281986

Sed簡介

sed是一種線上編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變,除非你使用重定向儲存輸出。Sed主要用來自動編輯一個或多個檔案;簡化對檔案的反覆操作;編寫轉換程式等。以下介紹的是Gnu版本的Sed 3.02。

 

-i選項:直接作用原始檔,原始檔將被修改。

 

sed命令和選項:

 

a\ 在當前行後新增一行或多行
c\ 用新文字替換當前行中的文字
d 刪除行
i\ 在當前行之前插入文字
h 把模式空間的內容複製到暫存緩衝區
H 把模式空間的內容新增到緩衝區
g 取出暫存緩衝區的內容,將其複製到模式緩衝區
G 取出暫存緩衝區的內容,將其追加到模式緩衝區
l 列出非列印字元
p 列印行
n 讀入下一行輸入,並從下一條而不是第一條命令對其處理
q 結束或退出sed
r 從檔案中讀取輸入行
! 對所選行以外的行應用所有命令
s 用一個字串替換另外一個字串

 

 

 

替換標誌:

 

g 在行內進行全域性替換
p 列印行
w 將行寫入檔案
x 交換暫存緩衝區和模式空間的內容
y 將字元轉換成另外一個字元

 

 

sed例子:

 

列印:p命令

 

sed ‘/abc/p’ file

列印file中包含abc的行。預設情況sed把所有行都列印到螢幕,如果某行匹配到模式,則把該行另外再列印一遍

sed  -n ‘/abc/p’ file 和上面一樣,只是去掉了sed的預設行為,只會列印匹配的行

 

 

刪除:d命令

 

sed ‘3,$d’ file    刪除從第3行到最後一行的內容。
sed ‘$d’ file 刪除最後一行的內容
sed ‘/abc/d’ 刪除包含abc的行。
sed ‘3d’ file 刪除第三行的內容

 

 

替換:s命令

 

sed  ‘s/abc/def/g’ file 把行內的所有abc替換成def,如果沒有g,則只替換行內的第一個abc
sed  -n ‘s/abc/def/p’ file 只打印發生替換的那些行
sed  ‘s/abc/&def/’ file 在所有的abc後面新增def(&表示匹配的內容)
sed  -n ‘s/abc/def/gp’ file 把所有的abc替換成def,並打印發生替換的那些行
sed  ‘s#abc#def#g’ file 把所有的abc替換成def,跟在替換s後面的字元就是查詢串和 
替換串之間的分割字元,本例中試#

 

 

指定行的範圍:逗號

 

sed  -n ‘/abc/,/def/p’ file 列印模式abc到def的行
sed  -n ‘5/,/def/p’ file 列印從第五行到包含def行之間的行。
sed /abd/,/def/s/aaa/bbb/g 修改從模式abc到模式def之間的行,把aaa替換成def

 

 

多重編輯-e

 

sed  -e ‘1,3d’ -e ‘s/abc/def/g’ file 刪除1-3行,然後把其餘行的abc替換成def

 

 

讀檔案:r命令

 

sed  ‘/abc/r newfile’ file 在包含abc的行後讀入newfile的內容

 

 

寫檔案:w命令  

 

sed  ‘/abc/w newfile’ file 在包含abc的行寫入newfile

 

 

追加:a命令     

 

sed  ‘/abc/a\def’ file 在包含abc的行後新起一行,寫入def

 

 

插入:i命令     

 

sed  ‘/abc/i\def’ file 在包含abc的行前新起一行,寫入def

 

 

修改:c命令   

 

sed  ‘/abc/c\def’ file 在包含abc的行替換成def,舊文字被覆蓋

 

 

讀取下一行:n命令  

 

sed  ‘/abc/{n ; s/aaa/bbb/g;}’ file 讀取包含abc的行的下一行,替換aaa為bbb

 

 

轉換:y命令       

 

sed  ‘y/abc/ABC’ file 將a替換成A,b替換成B,c替換成C(正則表示式元字元不起作用)

 

 

退出:q命令   

 

sed  ‘/abc/{ s/aaa/bbb/ ;q; }’ file 在某行包含了abc,把aaa替換成bbb,然後退出sed。

 

 

暫存和取用:h命令(把模式行儲存到暫存緩衝區)和g(取出暫存緩衝區的行並覆蓋模式緩衝區)G(取出臨時緩衝區的行)命令 

 

h和g是複製行為(覆蓋),H和G表示追加。    

sed  -e ‘/abc/h’  -e ‘$G’ file 包含abc的行通過h命令儲存到暫存緩衝區,在第二條命令匯中,sed讀到最後一行$時,G命令從暫存緩衝區中讀取一行,追加到模式緩衝區的後面。即所有包含abc的行的最後一行被複制到檔案末尾。
sed -e ‘/abc/{h; d;}’ 
      -e  ‘/def/{g; }’ file
包含abc的行會移到包含def的行上,並進行覆蓋。

 

 

暫存和互換:h和x命令    

 

 

sed  -e ‘/abc/h’  
-e ‘/def/x’ file
包含abc的行會被換成def的行。