繁体   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