grep -v フィルタが機能しません。

grep -v フィルタが機能しません。

grepオプションを使用してgrep -v結果をフィルタリングしたいです。ただし、特定のモードを使用すると、出力に違いはありません。 log.logの内容:

ERROR
error
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>

コマンドを実行するとき:

egrep -wi 'error|exception' /temp/log.log | grep -v 'error'

出力は次のとおりです。

ERROR
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>

しかし、次のコマンドを実行すると:

egrep -wi 'error|exception' /temp/log.log | grep -vi '<STATUS>ERROR</STATUS>'

それでも出力が提供されます。

ERROR
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>

そして私が探しているものは:

ERROR
EXCEPTION
exception
<MessageType>ERROR</MessageType>

なぜこれが起こるのですか?

ベストアンサー1

egrep -w 'error|exception'このコマンドは、grep結果でこれらのパターンを強調するためにパターンの前後に特殊文字(エラーや例外など)を追加するため、問題が発生します。

Haraldが言ったように。 grep出力のSTATUSタグの間にある「ERROR」にはflagsによって追加された特殊文字があるため、「ERROR」パターンはgrep出力文と一致しません-w

したがって、egrep結果がgrep -vコマンドに送信されると、パターンと一致しません。

おすすめ記事