regex - 使用 perl 作为更好的 grep 来匹配使用单行模式 m/RE/s 的多行

标签 regex perl

我正在尝试 grep 表达式(比如 BEGINEND )之间的文本,这些文本可能与以下内容不在同一行:

perl -wln -e 'm/BEGIN.+END/s and print;' < file.txt

请注意,因为 s修饰符(在 m/RE/s 中),"."允许匹配换行符(以及其他任何内容)。

这让模式可以将特定顺序的单词与它们之间的任何内容进行匹配(即模式 BEGIN 在一行上,而模式 END 在下面几行)。
如果两个模式在同一条线上,这可以正常工作,但当它跨越多条线时就不行了。我在这里缺少什么?

最佳答案

其实我确实找出了缺失的部分!我需要使用 -0777搜索整个文件作为记录的选项并使用 print $& 打印匹配的表达式反而:

perl -wln -0777 -e 'm/BEGIN.+END/s and print $&;' < file.txt

关于regex - 使用 perl 作为更好的 grep 来匹配使用单行模式 m/RE/s 的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925902/

相关文章:

javascript - 如何使用 javascript 将 rel ="nofollow"添加到与我的域无关的所有外部链接?

ruby - '/' 之间的某些符号是什么意思?

perl - 是否可以使用 Dist::Zilla 的可选依赖项?

perl - 如何判断 Perl 变量中的值是什么类型?

perl - 卸载 cpan 安装的所有 perl 模块

regex - mod_rewrite 可以做数学吗?

regex - 在特定索引处添加分隔符

java - 如何使用java正则表达式来匹配一行

perl - 如何临时更改 Perl 使用的 tmp 目录?

mysql - 来自另一个远程 ip perl 的远程数据库连接