2011-06-08 55 views
1

我有這樣的內容文件:如何根據重複的模式使用sed刪除一堆行?

[device] 
type=alpha 
instance=0 

[device] 
type=beta 
instance=1 

[device] 
type=gamma 
instance=2 

我試圖找出如何刪除線

[device] 
type=beta 
instance=1 

我無法使用[裝置]和實例之間的範圍內刪除= 2因爲它刪除了第一個設備部分。

謝謝。

回答

1

最簡單的方法是,首先取代所有的一些獨特性質的新線(例如!),然後將其穿過的sed,如下圖所示:

tr '\n' '!' < file.txt | sed 's/\[device\]!type=beta!instance=1//g' | tr '!' '\n' 

或者,你可以只用sed執行multi-line search and replace

sed -n ' 
# if the first line copy the pattern to the hold buffer 
1h 
# if not the first line then append the pattern to the hold buffer 
1!H 
# if the last line then ... 
$ { 
     # copy from the hold to the pattern buffer 
     g 
     # do the search and replace 
     s/\[device\]\ntype=beta\ninstance=1//g 
     # print 
     p 
} 
' file.txt