ログファイルなど、形式が決まったファイルからエラーコードや特定のキーワードを含む行を見つけて情報を取得するためのワンライナーのサンプルです。
実現したいこと
ログファイルの内容のうち、ERROR行のエラーコードとメッセージを表示する。
input.log
INFO(I056): Application started
ERROR(E234): Database connection failed
INFO(I078): Processing started
ERROR(E398): File read error
INFO(I099): Process completed
出力結果:エラー行のみ抜き出し、必要な情報のみ取り出してフォーマットを変えて表示する。
ErrorCode=234, Message=Database connection failed
ErrorCode=398, Message=File read error
サンプルコード
以下が、正規表現でエラー情報を取り出し、フォーマットを変えて表示するワンライナーです。
perl -ne "print \"ErrorCode=$1, Message=$2\n\" if /ERROR\(E(\d+)\): (.*)/" input.log
使用したオプションは以下の通りです。
- -n:各入力行に対して指定されたコードを実行します。各行の内容は”$_” に格納されます。出力にはprint等が必要です。
- -e:直後に続く文字列をPerlプログラムとして実行します。
- スクリプト後半のif文で、正規表現のパターンマッチで、エラー行の各情報をキャプチャします。
- スクリプト前半のprintでは、正規表現にマッチした場合に、キャプチャしたグループ$1と$2を使ってメッセージを表示します。
まとめ
本記事では、ファイルから正規表現で情報を抜き出し、フォーマットを変更して表示するワンライナーを紹介しました。