Perl

perlのワンライナーで複数行の置換を行う

More than 3 years have passed since last update.

perlのワンライナーでよく出てくるのはこんなもの

$ echo "hoge\nfuga\npiyo" | perl -pe 's/ge/GE/; s/pi/PI/;'
hoGE
fuga
PIyo

この場合、1行ずつ評価するため複数行の書き換えは出来ない。

複数行の場合-0オプションを使ってオプション修飾子にmつけて実行すれば良い。

$ echo "hoge\nfuga\npiyo" | perl -0pe 's/ge\nfu//m'
hoga
piyo

解説

-pはデフォルトでは1行ずつ-eの引数を評価する。つまりセパレータが\n
-0でセパレータがヌル文字(\0)になる。つまり、ファイル全体を一度に読み込むことになる(よって、巨大なファイルに実行するのはおすすめしない)。
また、正規表現のオプション修飾子にmを指定し複数行モードにする(s/hoge/fuga/m←このm

その他

perlのワンライナー自体はここらへん見たらいいと思う