地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Perl】複数行の置換

echo "tea\nconst"
tea
const

こんな出力からtestという文字を作りたいみたいなケースでperlワンライナーでやろうとすると何も考えないと¥nで改行されてうまくいかないです。

echo "tea\nconst" | perl -pe 's/a\ncon//m'
tea
const

これを防ぐためにはrecord separatorを指定してあげることでうまく動きます。オプションを付けなければセパレータは\0となります。

perl --help

Usage: perl [switches] [--] [programfile] [arguments]
  -0[octal/hexadecimal] specify record separator (\0, if no argument)

こんな感じ。巨大なファイルとかでやると全部メモリに乗せちゃう動きになるので注意が必要ですね。

echo "tea\nconst" | perl -0pe 's/a\ncon//m'
test