[英]How do I search and replace across multiple lines with Perl?
$ 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
開關有關。 它一次讀取一行輸入。 所以你不能對兩行之間的換行運行正則表達式,因為它永遠不會匹配。 您可以做的一件事是讀取所有輸入修改變量$/
並將regexp應用於它。 單程:
perl -e 'undef $/; $s = <>; $s =~ s/foo\nbar/FOO\nBAR/; print $s' baz.txt
它產生:
FOO
BAR
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.