1. ホーム
  2. regex

[解決済み】Grep正規表現に文字列が含まれない件

2022-04-02 03:37:50

質問

正規表現パターンのリストを grep を使用して syslog ファイルをチェックします。それらは通常、IPアドレスとログエントリーにマッチします。

grep "1\.2\.3\.4.*Has exploded" syslog.log

のようなパターンの羅列に過ぎない。 "1\.2\.3\.4.*Has exploded" の部分をループで渡すので、例えば"-v"を渡すことができない。

私は上記の逆をしようとして混乱しており、特定のIPアドレスとエラーを持つ行にマッチしないように "!1.2.3.4.*Has exploded" は、それが爆発したことを私に伝える1.2.3.4以外のもののためのシスログ行にマッチします。I しなければならない マッチしないIPを含めることができる。

StackOverflowで似たような投稿をいろいろと見かけました。しかし、それらは正規表現パターンを使用しており、私はそれをうまく使うことができないようです。 grep . の動作例をどなたか教えてください。 grep をお願いします。

UPDATE このようなスクリプトで起こっています。

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

解決方法は?

grep が一致します。 grep -v はその逆を行います。もし、AにはマッチするがB&にはマッチしない、というような場合は、通常パイプを使用します。

grep "${PATT}" file | grep -v "${NOTPATT}"