Grepは-vと-A / Bを同時に使用することはできません。

Grepは-vと-A / Bを同時に使用することはできません。

だから-vパラメータと-Aパラメータと一緒にgrepを使ってみました。

だから私のファイルには次のテキストがあります。

This error
-this
-this
-that
[text I want]
This error
-asd
-asfag
-adsfhs
[text I want]
[text I want]
This error
-asdgsda
-asdgg
-gasdg

尾を見た後、このログファイルは同じ内容で埋められ、This errorその後に3行の構文があることがわかりました。これはgrep -A3 'This error'、エラーとそれに応じて3行を表示することを使用して簡単に見つけることができました。

ところで、それを除いて全部見たくて-vパラメータを使ってみたのですが。これにより、grep -v -A3 'This error'grepがまったく機能しないかのようにファイル全体が返されます。

ここで問題は何ですか?

答え1

sed代わりに利用可能であれば、grep良い解決策を提供します。

sed -e '/This error/,+3d' myfile

This errorこれにより、対応する文字列と次の3行を含む行が削除されますが、残りはすべて出力されます。このsedコマンドにはGNUが必要ですsed+3アドレスは拡張子です)。

答え2

あなたはそれを使用することができますpcregrep

pcregrep -vM  'This error\n.*\n.*\n.*' file

出力は次のとおりです。

[text I want]
[text I want]
[text I want] 

引用するhttps://stackoverflow.com/q/2686147/9235408

答え3

フィンの水泳選手としてコメントで指摘したgrep -vコマンドは、テキストと一致しない各行の後に3行を出力しますThis error。あなたが望むものではありませんか?

使用標準sed:

sed '/This error/{ N;N;N; d; }' file

ファイル内のテキストを検索し、This errorそのテキストを見つけたら、次の3行を読み、4行すべてを削除します。他のラインはすべて出力されます。

関連情報