匹配多行并在 perl regex 中打印

Mer*_*glu 2 regex perl multiline

我想匹配多行正则表达式并仅打印匹配的行:

$ cat test.txt
line1
line2
line3
$ perl -ne 'print if /line2.line3/s' test.txt
$
Run Code Online (Sandbox Code Playgroud)

这个正则表达式实际上匹配,line2\nline3但没有打印出来。regex101验证它是否匹配。

使用命令 switch0777打印匹配的行,但也打印不匹配的行:

$ perl -0777 -ne 'print if /line2.line3/s' test.txt
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)

0777在替换正则表达式中使用按预期工作:

$ perl -0777 -pe 's/line2.line3/replaced/s' test.txt
line1
replaced
Run Code Online (Sandbox Code Playgroud)

我想了解是否可以仅打印与多行正则表达式匹配的行?

cho*_*oba 5

print没有参数打印$_。如果使用-0777,则将整个文件读入$_,因此如果匹配,则打印整个文件。如果只想显示匹配的部分,可以使用

 perl -0777 -ne 'print "$1\n" while /(line2.line3)/sg' test.txt
Run Code Online (Sandbox Code Playgroud)