テキストファイルの中から、条件に一致する行を抜き出して表示する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
出力結果:エラー行のみ表示する。
ERROR(E234): Database connection failed
ERROR(E398): File read error
サンプルコード
以下が、正規表現でパターンマッチし、エラー行のみ表示するワンライナーです。
perl -ne "print if /^ERROR/" input.log
使用したオプションは以下の通りです。
- -n:各入力行に対して指定されたコードを実行します。各行の内容は”$_” に格納されます。出力にはprint等が必要です。
- -e:直後に続く文字列をPerlプログラムとして実行します。
- スクリプト後半のif文で、正規表現のパターンマッチをしています。今回は、行頭が”ERROR”で始まる行を正規表現で探します。
- スクリプト前半のprintでは、後半の正規表現にマッチしている場合に、その行を表示します。perlでは、printの引数が省略されている場合は、”$_” を使用します。
まとめ
この記事では、テキストファイルの中から、条件に一致する行を抜き出して表示するperlワンライナーを紹介しました。今回紹介したコードをベースに、複雑な処理にも挑戦してみてください。