$ Perl --version
This is Perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
$ echo -e "foo\nbar" > baz.txt
$ Perl -p -e 's/foo\nbar/FOO\nBAR/m' baz.txt
foo
bar
この代替品を機能させるにはどうすればよいですか?
-0
スイッチを使用して、入力セパレータを変更できます。
Perl -0777pe 's/foo\nbar/FOO\nBAR/' baz.txt
-0777
は区切り文字をundef
に設定し、-0
だけで\0
に設定します。これは、ヌルバイトを含まないテキストファイルで機能する可能性があります。
正規表現には/m
も^
も含まれていないため、$
は不要であることに注意してください。
それは-p
スイッチと関係があります。入力を一度に1行ずつ読み取ります。したがって、2行間の改行は一致しないため、正規表現を実行することはできません。できることの1つは、すべての入力変更変数$/
を読み取り、それに正規表現を適用することです。一方通行:
Perl -e 'undef $/; $s = <>; $s =~ s/foo\nbar/FOO\nBAR/; print $s' baz.txt
それは以下をもたらします:
FOO
BAR