3

一致しないファイルの行をすべて見つけることができますgrep -v 'my_pattern' some_file。また、grepのオプションとの一致-A-B前後/前後にいくつかの文字列を出力できます。-Cしかし、これら2つのオプションを組み合わせて、パターンのある行と一致した行の近くの特定の量の行を除外することはできません。grepは結果としてファイル全体を表示します。たとえば、次のような多くのパターンのログがあります。

25.02.2012 10:41:37 here goes memory state
25MiB free
16MiB allocated
max free block is 4MiB

それらをフィルタリングしたいと思います。もちろん、カスタムのperl / awkスクリプトを書くことはできますが、これを行うためのよりエレガントな方法はありますか?

4

2 に答える 2

1

vimテキストエディタを使用できます。

:g/my_pattern/-2,//+2d
于 2012-02-25T07:52:55.680 に答える
1

grepソリューション:

grep -C2 pattern file | grep -vFf- file

これは、除外するgrep -C2行を取得するために使用します。file

次にgrep -vFf-、stdinからそれらの行を取得し、一致しないすべての行を報告します。

注意:これにより、のどこかで「コンテキスト」に一致するすべての行が削除されfileます。したがって、コンテキストに空白行が含まれている場合は、すべての空白行を削除します。

于 2020-10-22T17:44:47.917 に答える