grepは複数の文字列を除外します


115

tail -fを使用してログファイルを表示しようとしていますが、次の文字列を含むすべての行を除外したいと思います。

"Nopaging the limit is"`  and `"keyword to remove is"

次のように1つの文字列を除外できます。

tail -f admin.log|grep -v "Nopaging the limit is"

しかし、string1またはのいずれかを含む行を除外するにはどうすればよいですかstring2

回答:


106

grepで複数行を除外する2つの例:

これを入れてくださいfilename.txt

abc
def
ghi
jkl

文字列内のトークン間のパイプで-Eオプションを使用するgrepコマンド:

grep -Ev 'def|jkl' filename.txt

プリント:

abc
ghi

括弧で囲まれたトークン間のパイプで-vオプションを使用するコマンド:

egrep -v '(def|jkl)' filename.txt

プリント:

abc
ghi

15
grep -v -e def -e jkl
IMHO

4
またはさらに良い:grep -Fv -e def -e jklこれはさらに高速です!
Frizlab 2016

11
-Fフラグを使用すると、パイプの代わりに改行を区切り文字として使用できます。これにより、コマンド出力をフィルターとしてより簡単に使用できるようになります。例:grep -vF $(pgrep myprocess)
Phlarx

45
grep -Fv -e 'Nopaging the limit is' -e 'keyword to remove is'

-F (正規表現の代わりに)リテラル文字列で一致

-v 試合を逆転

-e 複数の検索パターンが可能(すべてリテラルおよび反転)


1
これが正解です。複数のgrep -vインスタンスと正規表現の人工的な要件の両方を回避する唯一の方法です(複数の文字列を個別の引数で明確に指定できます)。ただ...何が含まれている可能性があり、文字列のスクリプトでプログラムその正規表現を構築する想像
user2394284

除外するキーワードを渡さない場合、何も除外せずにすべてを除外するため、実際にはこれらはどれも正解ではありません。
Győriシャーンドル

37

別のオプションは、除外リストを作成することです。これは、除外するものの長いリストがある場合に特に便利です。

vi /root/scripts/exclude_list.txt

除外するものを追加します

Nopaging the limit is
keyword to remove is

次に、grepを使用してファイルログファイルから行を削除し、除外されていない情報を表示します。

grep -v -f /root/scripts/exclude_list.txt /var/log/admin.log

1
私はあなたが(または後者が存在することさえも)-v一緒に使うことができるとは思いませんでした-f
Sridhar Sarnobat 16

とても便利!
サマスピン

除外リスト用の一時ファイルを作成する必要がないことに注意してください。bashでは、プロセス置換を使用できます。:除外リストはちょっと動的であり、それぞれの使用は一度だけ使用される前に、あなたはそれを生成する必要があると思います場合、これは便利ですgrep -v -f <(gen_exclusions.sh) /var/log/admin.log
ミロスラフ


15
tail -f admin.log|grep -v -E '(Nopaging the limit is|keyword to remove is)'

11

次のような通常のgrepを使用できます。

tail -f admin.log | grep -v "Nopaging the limit is\|keyword to remove is"


1
この答えはMacOSXで私に役立ちました。パイプを
回避すること

5

グループは連鎖させることができます。例えば:

tail -f admin.log | grep -v "Nopaging the limit is" | grep -v "keyword to remove is"

1
ここでの問題は、フィルターで除外されるプロセスの代わりに、N個のプロセスを順番に実行する必要があり、それぞれが何かをフィルターで除外することです。それは物事を大幅に遅くする可能性があります。
Artem Oboturov 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.