之間的文本,所以我發現這個SED表達爲獲得獨家的關鍵字的關鍵字之間的文本:使用SED獲得兩個關鍵詞(而不是關鍵詞本身)
cat example.txt | sed '/^KEYWORD1/,/^KEYWORD2/!d; //d'
其中一例。 TXT:
do
not
care
KEYWORD1
I
want
this
KEYWORD2
do
not
care
輸出:
I
want
this
不過,我想了解知道是什麼正在用這個表達。我的理解是,使用'模式範圍'(如果這是不恰當的術語,請糾正我),當您第一次匹配時設置布爾值,並且僅在布爾值爲true時才執行模式範圍後面的命令。
然後是//d
其中//
應該表示最後匹配的表達式/正則表達式。因此,它是正確的,在這種情況下,帶有圖案的範圍,邏輯如下:!
- 環
- 查找
/^KEYWORD1/
,設置布爾爲true,用d命令進行不刪除這條線,然後自從上次的正則表達式是/^KEYWORD1/
然後//d
實際上是/^KEYWORD1/d
它刪除此行,則進入不刪3個下一行和/^KEYWORD1/
沒有在所述行因此沒有被刪除 - 查找
/^KEYWORD2/d
發現 - 布爾爲真,則執行!d和然後
/^KEYWORD2/d
,因爲這是最後的正則表達式中使用
所以在這一點上,我不知道如何前後線不打印,因爲它不執行,除非模式範圍標誌命令(!d
)設置爲true。
或者確實至少看看每一行的命令,並且由於第一個命令是反向刪除,它會以某種方式更改邏輯以刪除模式範圍bool爲false的所有其他行?
任何澄清如何這個sed表達式的作品將不勝感激。我已經讀了this great resource上下,但仍不完全理解表達的所有細節。
如果將光標懸停在上面的sed標誌上並選擇info,您可以找到sed相關問題的巨大資源。也許[this](http://sed.sourceforge.net/sedfaq3.html#s3.3)鏈接也可能啓發你。 – potong