2015-04-15 65 views
2

假設我們有以下內容的文件:如何從使用sed的匹配開始的文件中刪除所有行?

alpha 
beta 
keyword 
gamma 
phi 

什麼是sed命令,看起來對「關鍵詞」模式匹配,然後刪除所有行?輸出將是:

alpha 
beta 

類似的命令,sed -n -e '1,/^keyword/p',幾乎工作,但保留在輸出的「關鍵字」行。

回答

2
$ sed -n '/keyword/q;p' file 
alpha 
beta 

一些替代品可以考慮使用一個更加統一的方法來控制什麼獲取印刷前/包括/排除關鍵字後:

$ awk '/keyword/{f=1} !f' file # = sed -n '/keyword/q;p' file 
alpha 
beta 

$ awk '!f; /keyword/{f=1}' file # = sed -n 'p;/keyword/q' file 
alpha 
beta 
keyword 

$ awk '/keyword/{f=1} f' file # = sed -n '/keyword/,$p' file 
keyword 
gamma 
phi 

$ awk 'f; /keyword/{f=1}' file # = sed -n '1,/keyword/{d};p' file 
gamma 
phi 

以上awk腳本始終只是設置一個標誌,當關鍵詞被發現並且您可以控制在測試關鍵字之前或之後通過測試是否設置標誌來打印的內容。

另一方面,sed腳本必須將第二版和第三版之間的樣式從簡單的測試/打印轉換爲範圍表達式,併爲第三和第四個腳本與前兩個腳本引入不同的字符/語法。

另請參閱Printing with sed or awk a line following a matching pattern瞭解更多圍繞正則表達式打印範圍的解決方案。

+1

你也可以反轉這個並執行'sed'/ keyword /,$ d'file',但我認爲這對於這個任務來說效率嚴格低。 –

+0

與GNU sed:'sed'/關鍵字/ Q'文件' – Cyrus

+0

@EtanReisner,你會介意解釋爲什麼它效率會降低嗎? –

相關問題