search
LoginSignup
24

More than 5 years have passed since last update.

posted at

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

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のワンライナー自体はここらへん見たらいいと思う

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
24