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

Regex 使用perl作为更好的grep,使用单行模式m/RE/s匹配多行,regex,perl,Regex,Perl,我正在尝试grep以查找到表达式之间的文本(例如开始和结束),该文本可能与以下内容不在同一行: perl -wln -e 'm/BEGIN.+END/s and print;' < file.txt perl-wln-e'm/BEGIN.+END/s和print;'file.txt 请注意,由于s修饰符(在m/RE/s中),“允许与换行符(以及其他任何内容)匹配 这使得模式可以将特定顺序中的单词与它们之间的任何内容相匹配(即模式BEGIN位于一行,而模式END位于下面几行)。 如果两个

我正在尝试grep以查找到表达式之间的文本(例如
开始
结束
),该文本可能与以下内容不在同一行:

perl -wln -e 'm/BEGIN.+END/s and print;' < file.txt
perl-wln-e'm/BEGIN.+END/s和print;'file.txt
请注意,由于
s
修饰符(在
m/RE/s
中),
允许与换行符(以及其他任何内容)匹配

这使得模式可以将特定顺序中的单词与它们之间的任何内容相匹配(即模式
BEGIN
位于一行,而模式
END
位于下面几行)。
如果两个图案在同一条线上,这很好,但当它跨越多条线时就不行了。我遗漏了什么?

事实上,我确实找到了遗漏的部分!我需要使用
-0777
选项搜索整个文件作为记录,并使用
print$&
打印匹配的表达式:

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

只要允许,我会尽快这样做(两天内)