sed命令n,N,d,D,p,P,h,H,g,G,x解析

1、

sed執行模板=sed '模式{命令1;命令2}'

即逐行讀入模式空間,執行命令,最後輸出列印出來

2、

爲方便下面,先說下p和P,p列印當前模式空間內容,追加到默認輸出之後,P列印當前模式空間開端至\n的內容,並追加到默認輸出之前。

sed並不對每行末尾\n進行處理,但是對N命令追加的行間\n進行處理,因爲此時sed將兩行看做一行

2-1、n命令

n命令簡單來說就是提前讀取下一行,覆蓋模型空間前一行(並沒有刪除,因此依然列印至標准輸出),如果命令未執行成功(並非跳過:前端條件不匹配),則放棄之後的任何命令,並對新讀取的內容,重頭執行sed。

例子:

從aaa文件中取出偶數行
cat aaa
This is 1    
This is 2    
This is 3    
This is 4    
This is 5    
   
sed -n 'n;p' aaa         //-n表示隱藏默認輸出內容    
This is 2    
This is 4


注 釋:讀取This is 1,執行n命令,此時模式空間爲This is 2,執行p,列印模式空間內容This is 2,之後讀取 This is 3,執行n命令,此時模式空間爲This is 4,執行p,列印模式空間內容This is 4,之後讀取This is 5,執行n 命令,因爲沒有了,所以退出,並放棄p命令。

因此,最終列印出來的就是偶數行。

 

2-2、N命令

N命令簡單來說就是追加下一行到模式空間,同時將兩行看做一行,但是兩行之間依然含有\n換行符,如果命令未執行成功(並非跳過:前端條件不匹配),則放棄之後任何命令,並對新讀取的內容,重頭執行sed。

例子:

從aaa文件中讀取奇數行

cat aaa   
This is 1   
This is 2   
This is 3   
This is 4   
This is 5   
                                                     
sed -n '$!N;P' aaa            
This is 1   
This is 3   
This is 5


注釋中1代表This is 1   2代表This is 2  以此類推

注釋:讀取1,$!條件滿足(不是尾行),執行N命令,得出1\n2,執行P,列印得1,讀取3,$!條件滿足(不是尾行),執行N命令,得出3\n4,執行P,列印得3,讀取5,$!條件不滿足,跳過N,執行P,列印得5

 

2-3、d命令

d命令是刪除當前模式空間內容(不在傳至標准輸出),並放棄之後的命令,並對新讀取的內容,重頭執行sed。

d命令例子

從aaa文件中取出奇數行

cat aaa   
This is 1   
This is 2   
This is 3   
This is 4   
This is 5   
                                                           
sed 'n;d' aaa           
This is 1   
This is 3   
This is 5


注釋:讀取1,執行n,得出2,執行d,刪除2,得空,以此類推,讀取3,執行n,得出4,執行d,刪除4,得空,但是讀取5時,因爲n無法執行,所以d不執行。因無-n參數,故輸出1\n3\n5

2-4、D命令

D命令是刪除當前模式空間開端至\n的內容(不在傳至標准輸出),放棄之後的命令,但是對剩余模式空間重新執行sed。

D命令例子

從aaa文件中讀取最後一行

cat aaa   
This is 1   
This is 2   
This is 3   
This is 4   
This is 5   
                                                
sed 'N;D' aaa           
This is 5


注釋:讀取1,執行N,得出1\n2,執行D,得出2,執行N,得出2\n3,執行D,得出3,依此類推,得出5,執行N,條件失敗退出,因無-n參數,故輸出5

 

2-5、y命令

y命令的作用在于字符轉換

y命令例子:

將aaa文件內容大寫

sed 'y/his/HIS/' aaa  
THIS IS 1  
THIS IS 2  
THIS IS 3  
THIS IS 4  
THIS IS 5


此外,如果需要對某個字符串進行大小寫轉換,則可使用如下方法

cat ddd   
This is a and a is 1   
This is b and b is 2   
This is c and c is 3   
This is d and d is 4   
This is e and e is 5   
    
sed 's/\b[a-z]\b/\u&/g' ddd   
This is A and A is 1   
This is B and B is 2   
This is C and C is 3   
This is D and D is 4   
This is E and E is 5


2-6、h命令,H命令,g命令,G命令

h命令是將當前模式空間中內容覆蓋至保持空間,H命令是將當前模式空間中的內容追加至保持空間

g命令是將當前保持空間中內容覆蓋至模式空間,G命令是將當前保持空間中的內容追加至模式空間

命令例子:

將ddd文件中數字和字母互換,並將字母大寫

cat ddd.sed
h  
{  
s/.*is \(.*\) and .*/\1/  
y/abcde/ABCDE/
G  
s/\(.*\)\n\(.*is \).*\(and \).*\(is \)\(.*\)/\2\5 \3\5 \4\1/  
}  
                                           
sed -f ddd.sed ddd  
This is 1 and 1 is A  
This is 2 and 2 is B  
This is 3 and 3 is C  
This is 4 and 4 is D  
This is 5 and 5 is E


注釋:讀取1,執行h,複制到保持空間,執行s,模式空間得到匹配到的字母a,然後執行y,將a轉成A,執行G,追加保持空間內容到模式空間,得

A\nThis is a and a is 1;執行s,重新排列,得出This is 1 and 1 is A;以此類推,得出結果。

這裏需要注意的是匹配的內容中,空格一定要處理好,空格處理不對,會造成第二次s匹配錯誤,無法執行重新排列或排列錯誤

2-7、x命令

x命令是將當前保持空間和模式空間內容互換

 

轉自:http://hi.baidu.com/aaa103439/item/dbaa6d0d27b4f812cc34eab8

更多相關文章
  • 1. Sed簡介sed 是一種線上編輯器,它一次處理一行內容.處理時,把當前處理的行存儲在臨時緩沖區中,稱爲"模式空間"(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往螢幕.接著處理下一行,這樣不斷重複,直到文件末尾.文件內容並沒 ...
  • 功能說明: 利用script來處理文本文件.  語 法: sed [-hnV][-e<script>][-f<script文件>][文本文件]  補充說明: sed可依照script的指令,來處理.編輯文本文件.  參 數: -e<script>或-express ...
  • sed 編輯器是 Linux 系統管理員的工具包中最有用的資産之一, 因此,有必要徹底地了解其應用 Linux 操作系統最大的一個好處是它帶有各種各樣的實用工具.存在如此之多不同的實用工具,幾乎不可能知道並了解所有這些工具.可以簡化關鍵情況下操作的一個實用 工具是 sed.它是任何管理員的工具包中最 ...
  • sed是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用,功能不同凡響.處理時,把當前處理的行存儲在臨時緩沖區中,稱爲"模式空間"(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往螢幕.接著處理下一行,這樣不斷 ...
  • Shell編程前奏四:Sed命令的使用
        sed 是一種線上編輯器,它一次處理一行內容.處理時,把當前處理的行存儲在臨時緩沖區中,稱爲"模式空間"(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往螢幕.接著處理下一行,這樣不斷重複,直到文件末尾.文件內容並沒有 改變 ...
  • 1.簡介 sed是非交互式的編輯器.它不會修改文件,除非使用shell重定向來保存結果.默認情況下,所有的輸出行都被列印到螢幕上. sed編輯器逐行處理文件(或輸入),並將結果發送到螢幕.具體過程如下:首先sed把當前正在處理的行保存在一個臨時緩存區中(也稱爲模式空間),然後處理臨時緩沖區中的行,完 ...
  • sed流編輯器是shell中處理文本內容的一大利器.sed命令從文本流中讀取一行文本到模式空間中進行相應的命令.或腳本處理,因此在處理換行符時會有點特殊. 下面的命令可以很正確的執行: echo "a,b,c,d" |sed 's/,/\n/g' 但是如果我想恢複回來,下面的命令 ...
  • sed是一個非交互性性文本編輯器, 它編輯文件或標准輸入導出的文件拷貝.標准輸入可能是來自鍵盤.文件重定向.字符串或變量,或者是一個管道文件.sed可以隨意編輯小或大的文件,有許多 sed命令用來編輯.刪除,並允許做這項工作時不在現場.sed一次性處理所有改變,因而變得很有效,對用戶來說,最重要的是 ...
  • 1.sed簡介 sed是非交互式的編輯器.它不會修改文件,除非使用shell重定向來保存結果.默認情況下,所有的輸出行都被列印到螢幕上. sed編輯器逐行處理文件(或輸入),並將結果發送到螢幕.具體過程如下:首先sed把當前正在處理的行保存在一個臨時緩存區中(也稱爲模式空 間),然後處理臨時緩沖區中 ...
一周排行