syslog ファイルと照合するために、正規表現パターンのリストを渡していますgrep
。通常、これらは IP アドレスとログ エントリを照合します。
grep "1\.2\.3\.4.*Has exploded" syslog.log
これは、ループ内で渡している部分のようなパターンのリストにすぎないため"1\.2\.3\.4.*Has exploded"
、たとえば「-v」を渡すことはできません。
上記の逆のことをやろうとしていて、特定の IP アドレスとエラーの行を一致させないようにしようとして混乱しています。そのため、「!1.2.3.4.*Hasexploded」は、爆発したことを知らせる 1.2.3.4 以外の syslog 行と一致します。一致しないように IP アドレスを含めることができる必要があります。
Stack Overflow で同様の投稿をいくつか見てきました。しかし、それらは正規表現パターンを使用していて、私にはうまく機能しないようですgrep
。 の実用的な例は何でしょうかgrep
?
これは次のようなスクリプトで発生します。
patterns[1]="1\.2\.3\.4.*Has exploded"
patterns[2]="5\.6\.7\.8.*Has died"
patterns[3]="\!9\.10\.11\.12.*Has exploded"
for i in {1..3}
do
grep "${patterns[$i]}" logfile.log
done
ベストアンサー1
grep
一致する場合は、grep -v
その逆を行います。「A に一致するが B には一致しない」必要がある場合は、通常、パイプを使用します。
grep "${PATT}" file | grep -v "${NOTPATT}"