回答:
grep -E 'fatal|error|critical|failure|warning|' *.log
grep
ディレクトリをスキップしながら、すべてのファイルを再帰的にチェックするにはどうすればよいですか?grep -E 'text' **/*
動作しますが、各サブディレクトリのためのエラーメッセージを表示します(その後、正しく内のすべてのファイルをチェックします)
find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
次のようなものを使用できます。
find . -name "*.log" | xargs grep -E 'fatal|error|critical|failure|warning|'
これにより.log
、拡張子を持つすべてのファイルが検索され、grep
コマンドが適用されます。
xargs
の可能性を気にしますか?find . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
サブディレクトリファイルも再帰的に検索したい場合は、以下のコマンドを使用できます
サブディレクトリファイルも再帰的に検索します
egrep -r "string1|string2" pathname
これは非常に時間のかかる作業でした。もちろん、複数の異なるログで複数の文字列を同時に検索する場合は、スクリプトを作成する必要があります。しかし、私は最近これをしなければならなかったし、それは非常に苦痛でした。それにもかかわらず、準備が完了し、次のリンクからダウンロードできます。
これが機能する方法は非常に簡単です。
シナリオ1:1つの ログファイルで1つの文字列を監視する
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open' '.' 1 2 single_errCheck -ndshow
シナリオ2:1つの ログファイルで複数の文字列を監視する
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_errCheck -ndshow
シナリオ3:複数のログファイルの単一/複数の文字列を監視する
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_err_multi_logCheck -ndshow
ノート:
_P_はORを意味します-パイプ「|」を置き換えます 「_P_」を含む文字列を検索する必要が少なくなるためです。「_P_」と入力したくない場合は、_P_を「|」に置き換えることができます。
このスクリプトを使用する場合、頻繁に変更するパラメーターは次のとおりです。
'-ndfoundmul'を使用すると、次のような出力が得られます。
[root@dgphxtest001]# ./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 blahblahA -ndfoundmul
OK: [/var/log/messages][1] /var/log/messages:P=(can_t_open=0 ntpd_stat=0)_F=(117s)_R=(228,228=0)
元のポスターの問題の解決策:複数のログファイルで複数の文字列をスキャンする
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'fatal_P_error_P_critical_P_failure_P_warning' '.' 1 2 multierr_logCheck -ndshow
OS:これはUbuntuおよびRed Hatでテストされました
grep -EFn "fatal|error|critical|failure|warning|search-string" /path/to/the/file/log_file?.lo* --color=auto
これは、「log_file?」で始まる名前のファイルで「致命的またはエラーまたは重大または失敗または警告または検索文字列」を検索します。パス/ path / to / the / file /の拡張子'lo ' *を使用して、検索文字列にランダムな色を付け、見つかった行番号を出力します。
grep
スキルに答えられる可能性のある他の質問があるので、USEキャリアで幸運を祈ります!
-E
かつ-F
同時に使用することはできません、彼らは(タイプミスを?)矛盾しています。
JigarGandhiの答えは、アスタリスクワイルドカードの使用を示しています。それらはもっとあり、ここで、またはを実行して表示できますman 7 glob
。
そのうちの1つが便利だとわかったのは、との範囲一致[]
です。私が取り組んでいるシステムは連続番号のログファイルを生成するので、例えばproduct.log.1
product.log.2
...
product.log.200
、3つまたは4つの連続ファイルで1つのコマンドでgrepするのが便利ですが、それ以上ではありません。したがって、この
grep 'whatever' product.log.[5-7]
product.logで終わるすべてのファイルをgrepします。5、6、または7。ワイルドカードは最後にある必要はないため、flickerflyの答えは、
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
また、これらのワイルドカードはcp
、たとえば他のコマンドでも使用できることに注意してください。
ファイルがすべて同じフォルダーである場合は、中括弧を使用することもできます。
例を見る
grep -E 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}
grepにsを追加すると、ファイルの欠落に関するエラーが抑制されます
grep -sE 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}
OSの違いにより、あるファイルと他のファイルにある複数のディストリビューションで機能するコマンドを実行するために、自分でこれを試していました。
メールログ
sudo grep -is bob@example.com /var/log/{maillog,exim_mainlog,exim_rejectlog,mail.log,mail.err,syslog}
2> / dev / nullを使用してzgrepが.gzの警告を表示しないようにアーカイブしたメールログ
sudo zgrep -is bob@example.com /var/log/{maillog*,exim_mainlog*,exim_rejectlog*,mail.log*,mail.err*,syslog*} 2>/dev/null
grep
複数のファイル引数を取ることができます。