動的に複数のファイルをgrepして出力をカスタマイズする

動的に複数のファイルをgrepして出力をカスタマイズする

2つの異なるログファイルを監視したい(イベントがログに表示されるとき)。

tail -f /var/log/file1 -f /var/log/file2  

各ファイルについていくつかのパターンを把握したいと思います。

tail -f /var/log/file1 | grep '\(pattern1\|pattern2\)'  
tail -f /var/log/file2 | grep '\(pattern3\|pattern4\|pattern5\)' 

これらすべてを一緒に動作させる方法がわかりません。また、file1ログ出力を赤に、file2ログ出力を青で印刷したいと思います。

同様に、ファイル(このフォーラムからインポートされた一部)を使用してこれを実行できます。

RED='\033[0;31m'
BLUE='\033[0;34m'  

tail -fn0 /var/log/file1 | while read line;
    do
       if echo $line | grep -q '\(pattern1\|pattern2\)';then
          echo -e "{$RED}$line"
       fi
    done

しかし、複数のファイルでこれを行う方法がわかりません。どんなアイデアがありますか?

ベストアンサー1

複数のログを同時に解析するには、次の構文を使用できます。

tail -f /var/log/{log1,log2}

これにより、必要なすべてのログの目的の出力が生成されるため、パラメータを使用して複数の-eスキーマgrepを生成できます。それからすべて一緒に:

tail -f /var/log/{log1,log2} | grep -ie "pattern1" -ie "pattern2" -ie "pattern3"

grepで着色するには見てください。これ素晴らしい答えです。

おすすめ記事