繁体   English   中英

Perl 多行不匹配

[英]Perl does not match multiple lines

我想匹配:

Start Here Some example
text covering a few
lines. End Here

所以我做

$ perl -nle 'print $1 if /(Start Here.*?)End Here/s'

然后粘贴上面的文本和ctr-D 它与 cmd 不匹配 - 但它在文件脚本中匹配。 为什么?

使用-0命令行开关将输入记录分隔符 ( $/ ) 更改为 null。

perl -0777nle 'print $1 if /(Start Here.*?)End Here/s' <<END
Start Here Some example
text covering a few
lines. End Here
THE_END

人perlrun

-0[八进制/十六进制]
将输入记录分隔符 ($/) 指定为八进制或十六进制数。 […] 任何 0400 或以上的值都会导致 Perl 对整个文件进行 slurp,但按照惯例,值 0777 是通常用于此目的的值。

人perlvar

IO::Handle->input_record_separator(EXPR)
$INPUT_RECORD_SEPARATOR
$RS
$/
输入记录分隔符,默认为换行符。 这影响了 Perl 关于“线”的概念。 [...] 您可以将其设置为 [...] "undef" 以通读文件末尾。

正如其他人所解释的那样,您一次读取一行文件,因此多行匹配永远不会起作用。

一次读取一行文件通常是最好的方法。 所以我们可以使用“flip-flip”操作符来做到这一点:

 $ perl -nle 'print if /Start Here/ .. /End Here/' your_file_here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM