ablog

不器用で落着きのない技術者のメモ

正規表現でマッチした文字列の次の一行を取得する Perl ワンライナー

こんなファイルを作って、

% cat hoge.txt
aaaline1bbb
line2 cccc

line1 aaa bbbb
line2 cccc

ワンライナーを実行してみる。

% perl -0777 -pe 's/.*line1.*\n(.*?)\n/$1/g' hoge.txt
line2 cccc
line2 cccc

スクリプト化するとこんなコードになる。

% perl -MO=Deparse -0777 -pe 's/.*line1.*\n(.*?)\n/$1/g' hoge.txt
BEGIN { $/ = undef; $\ = undef; }
LINE: while (defined($_ = <ARGV>)) {
    s/.*line1.*\n(.*?)\n/$1/g;
}
continue {
    print $_;
}
-e syntax OK