Perlシングルラインコード代替コードブロック

Perlシングルラインコード代替コードブロック

ファイルがあります。foo.txt

hello world
      first line to change
        second line to change

foo.txt私はそれを読み取りに変更するperl one-linerを作成したいと思います。

hello world
      this is
        my new text

頑張った

perl -p -i -e 's/      first line to change\n        second line to change/      this is\n        my new text/g' foo.txt

ただし、このスクリプトはファイルに対して何もしません。私の一行に問題がありますか?

答え1

デフォルトでは、入力は一度に1行perlずつ読み取られるため、正規表現は絶対に一致しません。複数行入力を使用するには、2 つのオプションがあります。

短絡モードを有効にする:

perl -i.bak -00pe ...

または、ファイル全体を飲み込んでください。

perl -i.bak -0777pe ...

(上記の値は慣例的にファイル全体を占めることに-0400なります)perl-0777

関連情報