246

grepsyslog ファイルと照合するために正規表現パターンのリストを渡しています。これらは通常、IP アドレスとログ エントリに一致します。

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

ループで渡す部分のようなパターンのリストにすぎ"1\.2\.3\.4.*Has exploded"ないため、たとえば「-v」を渡すことはできません。

上記の逆を実行しようとして混乱し、特定の IP アドレスとエラーを含む行と一致しないため、「!1.2.3.4.*爆発しました」は 1.2.3.4 以外の syslog 行と一致し、爆発したことを示します. 一致しない IPを含めることができる必要があります。

StackOverflow で同様のさまざまな投稿を見てきました。しかし、彼らは私がうまく扱えないように見える正規表現パターンを使用してい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
4

3 に答える 3

467

grep一致する場合grep -vは、その逆を行います。「A に一致するが B には一致しない」必要がある場合は、通常、パイプを使用します。

grep "${PATT}" file | grep -v "${NOTPATT}"
于 2012-05-02T10:10:13.380 に答える
19
(?<!1\.2\.3\.4).*Has exploded

負の後読み (Perl 正規表現) を行うには、-P を指定してこれを実行する必要があるため、コマンドは次のようになります。

grep -P '(?<!1\.2\.3\.4).*Has exploded' test.log

これを試して。が前にある場合、否定後読みを使用して行を無視し1.2.3.4ます。それが役立つことを願っています!

于 2012-05-02T10:12:18.077 に答える