【Perlワンライナー】正規表現でファイルのフォーマットを変えて表示する処理を一行で書く

Perl

ログファイルなど、形式が決まったファイルからエラーコードや特定のキーワードを含む行を見つけて情報を取得するためのワンライナーのサンプルです。

実現したいこと

ログファイルの内容のうち、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を使ってメッセージを表示します。

まとめ

本記事では、ファイルから正規表現で情報を抜き出し、フォーマットを変更して表示するワンライナーを紹介しました。

タイトルとURLをコピーしました