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)
我想了解是否可以仅打印与多行正则表达式匹配的行?
print没有参数打印$_。如果使用-0777,则将整个文件读入$_,因此如果匹配,则打印整个文件。如果只想显示匹配的部分,可以使用
perl -0777 -ne 'print "$1\n" while /(line2.line3)/sg' test.txt
Run Code Online (Sandbox Code Playgroud)