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
コマンドに送信されると、パターンと一致しません。