【Perlワンライナー】ファイルから正規表現にマッチする行を表示する処理を一行で書く

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

出力結果:エラー行のみ表示する。

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ワンライナーを紹介しました。今回紹介したコードをベースに、複雑な処理にも挑戦してみてください。

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