文字列を含まない正規表現をGrepする 質問する

文字列を含まない正規表現をGrepする 質問する

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}"

おすすめ記事