2012-02-29 45 views
0

這裏是我的一行:操縱SED方面

sed -n '/BEGIN/,/END/{$d;1d;p}' query 

和查詢:

 
trash 

BEGIN first 
labas 
END 

nieko nėra 

BEGIN second 
iki 
END 
nesimato 

我期待這樣的結果:

 
labas 
iki 

不過,我得到這個:

BEGIN first 
labas 
END 
BEGIN second 
iki 
END 

我對sed上下文有什麼誤解?不應該{$d,1d;p}刪除匹配輸入的第一行和最後一行?

回答

1

不,它會刪除作爲文件第一行或最後一行的匹配輸入的任何行。如果您刪除query的前兩行(因此第一行是「BEGIN」),您可以看到效果。

1

這可能會爲你工作:

sed -n '/BEGIN/,/END/{//!p}' file 
labas 
iki 
+0

的確是它的工作原理,但並不有助於解釋爲什麼我的版本不..謝謝。你能給我一個指針嗎?這兩個斜線對於大括號中的上下文究竟做了什麼? – 2012-03-01 00:52:51

+1

只有當文件的第一行和最後一行之間有'/ BEGIN /,/ END /'範圍時,您的版本才能正常工作。 '//'是最後一個匹配正則表達式的縮寫,在本例中是'/ BEGIN /',後面是'/ END /'。在這些條件下,它不會打印出來,但會在它們之間的線上。 – potong 2012-03-01 01:09:08