我正在尝试 grep 表达式(比如 BEGIN
和 END
)之间的文本,这些文本可能与以下内容不在同一行:
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/