2011-11-30 85 views
12

我有以下命令:sed -i -e '/match1/,+2d' filex,它在文件「文件x」中找到匹配「match1」後刪除2行。我想添加幾個匹配,像match1,匹配2 ....如何使用「sed」在比賽/比賽後刪除2行?

所以它會刪除2行後找到任何匹配,我怎麼能做到這一點?

+0

你可以給一個輸入/輸出的例子,使其更清晰你所期望的? – sehe

+0

你的情況有明顯的'/ match1 /,+ 2d;/match2 /,+ 2d'有什麼不對嗎?它不會識別重疊,但是您的原始表達也不會。 – thiton

+0

[sed或awk:刪除模式後的n行]的可能重複(https://stackoverflow.com/questions/4396974/sed-or-awk-delete-n-lines-following-a-pattern) –

回答

20

兩種方式,這取決於sed的版本和平臺:

sed -e '/match1/,+2d' -e '/match2/,+2d' <oldfile> newfile 

sed -e '/match1\|match2/,+2d' <oldfile> newfile 
+0

謝謝你,這正是我想要的 – wael

+3

爲什麼然後這不是一個被接受的答案? – Drew

5

不是SED用戶,但在我看來,你可以使用:

sed -i -e '/(match1|match2)/,+2d' filex 

否則,如果可以的話,你可以這樣做:

sed -i -e '/match1/,+2d' filex && sed -i -e '/match2/,+2d' filex 

編輯:看起來像我有正確的想法,但ziu明白了。

4

如果我理解正確的話,你想

sed -e '/match1/,+2d' input.txt 

例如,創建輸入與seq 10 | sed '3i match1' > input.txt

1 
2 
match1 
3 
4 
5 
6 
7 
8 
9 
10 

sed -e '/match1/,+2d' input.txt輸出將是:

1 
2 
5 
6 
7 
8 
9 
10