確認する必要のあるログファイルのセットがあり、同じファイルの特定の文字列を一度に検索したいこれは可能ですか?現在、
grep -E "fatal|error|critical|failure|warning|" /path_to_file
これを使用して、複数のファイルの文字列を一度に検索するにはどうすればよいですか?これがスクリプト化する必要があるものである場合、誰かがこれを行うための簡単なスクリプトを提供できますか?
回答
grep -E "fatal|error|critical|failure|warning|" *.log
コメント
-
grep
でディレクトリをスキップし、それでもすべてを再帰的にチェックするにはどうすればよいですかファイル?grep -E 'text' **/*
は機能しますが、サブディレクトリごとにエラーメッセージが表示されます(その後、サブディレクトリ内のすべてのファイルが正しくチェックされます) - @Jorn、本当に新しい質問をする必要があります。ただし、
find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
-
grep: invalid max count
を取得するため、jherransの回答を使用しました
回答
次のようなものを使用できます:
find . -name "*.log" | xargs grep -E "fatal|error|critical|failure|warning|"
これは拡張子が.log
のすべてのファイルを検索し、grep
コマンドを適用します。
コメント
回答
使用する場合より簡単で、各ファイルを次々に指定できます。
grep -E "fatal|error|critical|failure|warning" file1.log file2.log
回答
必要な場合正規表現では取得できない任意のファイル名のセットをgrepするには:
grep -E "fatal|error|critical|failure|warning|" `cat<<FIN > file1 > file2 > ... > filen > FIN`
ファイル名を次々に貼り付けることの利点は何ですか?ファイル名リストをテキストファイルにまとめて貼り付けることができます。
回答
次の場合は、中括弧を使用することもできます。ファイルはすべて同じフォルダです。
例を参照してください
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の違いにより、1つのファイルと他のファイルにある複数のディレクトリで機能するコマンドを実行するために自分でこれを試していました。
メールログ
sudo grep -is [email protected] /var/log/{maillog,exim_mainlog,exim_rejectlog,mail.log,mail.err,syslog}
2> / dev / nullを使用してアーカイブされたメールログを使用して、zgrepの.gz警告の欠落を抑制します
sudo zgrep -is [email protected] /var/log/{maillog*,exim_mainlog*,exim_rejectlog*,mail.log*,mail.err*,syslog*} 2>/dev/null
回答
サブディレクトリファイルも再帰的に検索する場合は、以下のコマンドを使用できます
サブディレクトリファイルを再帰的に検索しますsまた
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_を「|」に置き換えるだけです。
このスクリプトを使用する場合、頻繁に変更するパラメータは次のとおりです。
- 監視するログファイルまたはログディレクトリ
- 年齢ログファイルを監視する必要があります。つまり、タイムスタンプが60分を超えるログファイルを監視または検出しないでください。
- 監視する文字列/パターン
- タグ-これは、指定する必要のある最後から2番目の引数です。これは、/ var / tmp / logXrayで監視しているログファイルに関する統計を記録します
- ログオプション-ndshow-これは、指定したパターンに一致することが見つかったログからエントリを出力する場合に使用するパラメータです。見つかった各パターンの総数を確認したいだけの場合は、「-ndshow」を「-ndfoundmul」に置き換えるだけです。
「-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とRedHatでテストされました
回答
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のキャリアで頑張ってください! - @zagrimsanポイントを取得しました、I ' -E '致命的|エラー|重大|失敗|警告| ' パラメータ。
- そして、彼は検索パターンではなく、複数のファイルを具体的に要求しました。もう一度質問を読んでください。
- Qからの引用:"特定の文字列を検索"、質問には彼が使用する検索パターン(一致する複数の文字列を含む)。ただし、質問のタイトルが、彼が実際に求めているものとは少しずれていることは間違いありません。ところで、
-E
と-F
は同時に使用できません'競合しています(タイプミス?)。
回答
JigarGandhi 「回答は、アスタリスクワイルドカードの使用法を示しています。さらに多くのワイルドカードがあり、ここまたは。
私が有用だと思ったものの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。ワイルドカードを最後に付ける必要がないため、フリッカーフライの回答は次のように簡略化できます
grep -E "fatal|error|critical|failure|warning" file[1,2].log
これらのワイルドカードは、たとえばcp
のように他のコマンドでも使用できることにも注意してください。
xargs
に悩まされる理由と、ファイル名の空白が大幅に破損する可能性find . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
?