簡體   English   中英

如何使用Perl跨多行搜索和替換?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM