本節索引
一、模式空間與保持空間
二、sed高級用法
三、示例分析
在上一章,我們學習了sed的一些基本用法,利用這些基本用法我們已經可以解決文本處理中遇到的絕大部
分問題,但要想更加利用好sed這個工具,我們還需要學習下它的一些高級用法。
一、模式空間與保持空間:
我們知道sed工作機制是每次讀取一行文本至模式空間(pattern space)中,在模式空間中完成處理,將
處理結果輸出至標準輸出設備;在模式空間中處理一行內容后會繼續處理下一行,那么對于處理過的行可
能還有其他的處理,因此可以把處理過的行傳送至一個叫保持空間(hold space)中,然后在后續的處理中
再次傳送回模式空間中。這就類似加工車間和倉庫的概念,好比模式空間是加工車間,保持空間就是倉
庫,不過這里的倉庫存儲的都是些半成品的產品。
二、sed高級用法:
Sed工具支持一些高級的命令來運用到保持空間中,這些高級命令有:
P:打印模式空間開端至\n內容,并追加到默認輸出之前 ?
h: 把模式空間中的內容覆蓋至保持空間中 ?
H:把模式空間中的內容追加至保持空間中 ?
g: 從保持空間取出數據覆蓋至模式空間 ?
G:從保持空間取出內容追加至模式空間 ?
x: 把模式空間中的內容與保持空間中的內容進行互換 ?
n: 讀取匹配到的行的下一行覆蓋至模式空間 ?
N:讀取匹配到的行的下一行追加至模式空間 ?
d: 刪除模式空間中的行 ?
D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,
并不會讀取新的輸入行,而使用合成的模式空間重新啟動循環。如果模式空間
不包含換行符,則會像發出d命令那樣啟動正常的新循環。
三、示例分析:
以下我們均以該文檔為例:
例1:cat test2.sed |sed ‘G’
解析:由于保持空間初始默認為空,所有將空行追加到每行的模式空間中輸出,等同在每行的
后面添加一個空行。
例2:cat test2.sed |sed ‘g’
解析:g和G的區別在,g為覆蓋模式空間,G為追加至模式空間,由于g默認為空,將每行的模式空間都覆
蓋為空行輸出,所以表現為5個空行。
例3:cat test2.sed |sed ‘$!d’
解析:$表示尾行,$!d則表示除了尾行都執行刪除。
例4:cat test2.sed |sed ‘n;d’
解析:n將第一行讀入模式空間輸出,并將下一行即第二行覆蓋至模式空間并刪除,如此循環,最終表現為
只顯示文本的奇數行。
例5:cat test2.sed |sed ‘N;D’
解析:N將第二行追加至第一行的模式空間中,D刪除模式空間內的第一行;對第二行執行命令,將第三行追加至第二行的模式空間內,并刪除模式中的第一行;如此循環,最后只輸出最后一行文本。
例6:cat test2.sed |sed ‘$!N;$!D’
解析:’$!N;$!D’即對文本中除了最后一行支持’N;D’操作,由例外5可知,除了最后一行執行’N;D’操作,得出
結果為只輸出倒數第二行,最后一行文本不處理,默認輸出,所有最后結果輸出倒數兩行的文本。
例7:cat test2.sed|sed -n ‘n;p’
解析:對第一行執行操作,n選項將第二行覆蓋至模式空間,在第一行和第二行的默認輸出后追加打印出來,-n取消默認輸出,如此循環,最后得出文本的偶數行。
例8:cat test2.sed|sed -n ‘1!n;p’
解析:與例7相比,例8為對除了第一行的其他行執行例7的操作,則最后的結果也為得出文本的奇數行。
例9:cat test2.sed |sed ‘/^$/d;G’
解析:^$為表示地址定界匹配到的空行,d將空行刪除,G在每行的文本后添加一個空行;最后的輸出結果即:刪除文本內的空行,并在每行后追加一行空行。
例10:cat test2.sed |sed ‘1!G;h;$!d’
解析:1!G表示除了第一行,都執行將保持空間的內容追加至模式空間并輸出,h命令使上一個模式空間內容將G覆蓋,最后$!d只保留對最后一行的執行結果,具體表現為:
對第1行只進入模式空間默認輸出,第2行將上一個模式空間內容(即第1行文本)覆蓋至保持空間,共同進入模式空間(包含第2至1行文本)并輸出;第3行將上一個模式空間內容(即第2至1行文本)覆蓋至保持空間,共同進入模式空間(包含第3至1行文本)并輸出;如此循環…….對第5行將上一個模式空間內容(第4至1行)覆蓋至保持空間,共同進入模式空間(包含5至1行)輸出;最后$!d除了最后一行的其他行的模式空間內容都刪除,最后只留最后一行的執行結果,即將文本倒序輸出。
例11:cat test2.sed |sed -n ‘1!G;h;$p’
解析:與例10相比,最后的$p只打印最后一行的模式空間內容(第5至1行),-n取消所有默認輸出,得出的結果與例10相同,倒序將文本輸出。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96587