2011-11-30 81 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