首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Perl跨多行进行搜索和替换?

如何使用Perl跨多行进行搜索和替换?
EN

Stack Overflow用户
提问于 2013-05-25 03:43:26
回答 2查看 13.9K关注 0票数 17
代码语言:javascript
复制
$ 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

我怎样才能让这个替代品工作呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-25 03:54:04

您可以使用-0开关更改输入分隔符:

代码语言:javascript
复制
perl -0777pe 's/foo\nbar/FOO\nBAR/' baz.txt

-0777将分隔符设置为undef-0单独将其设置为\0,这可能适用于不包含空字节的文本文件。

注意,/m是不需要的,因为正则表达式既不包含^也不包含$

票数 38
EN

Stack Overflow用户

发布于 2013-05-25 03:49:36

这与-p开关有关。它一次读取一行输入。因此,您不能对两行之间的换行符运行regexp,因为它永远不会匹配。您可以做的一件事是读取修改变量$/的所有输入,并对其应用正则表达式。一种方法:

代码语言:javascript
复制
perl -e 'undef $/; $s = <>; $s =~ s/foo\nbar/FOO\nBAR/; print $s' baz.txt

它产生了以下结果:

代码语言:javascript
复制
FOO
BAR
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16742526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档