LoginSignup
26
24

More than 5 years have passed since last update.

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

Posted at

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

26
24
0

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
  3. You can use dark theme
What you can do with signing up
26
24