だから-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]
答え3
フィンの水泳選手としてコメントで指摘した、grep -v
コマンドは、テキストと一致しない各行の後に3行を出力しますThis error
。あなたが望むものではありませんか?
使用標準sed
:
sed '/This error/{ N;N;N; d; }' file
ファイル内のテキストを検索し、This error
そのテキストを見つけたら、次の3行を読み、4行すべてを削除します。他のラインはすべて出力されます。