2011-11-30 10 views
12

私は次のコマンドを持っています:sed -i -e '/match1/,+2d' filex、ファイル "ファイルx"の "match1"というマッチを見つけた後に2行を削除します。マッチ1、マッチ2のようにいくつかのマッチを追加したいと思っています....どのように "sed"を使用して一致/マッチ後に2行を削除できますか?

マッチを見つけたら2行削除しますので、どうすればいいですか? sedのバージョンおよびプラットフォームに応じて、

+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 -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 

EDIT:私は正しいアイデアを持っていたようですが、ziuはそれを得ました。

4

私が正しくあなたを理解していれば、あなたはseq 10 | sed '3i match1' > input.txtで入力を作成し、例えば

sed -e '/match1/,+2d' 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 
関連する問題