我想匹配。
Start Here Some example
text covering a few
lines. End Here
那我就配了
$ perl -nle 'print $1 if /(Start Here.*?)End Here/s'
然后粘贴上面的文字和 ctr-D
. 它不符合cmd - 但在文件脚本中却符合。为什么?
正如其他人所解释的那样,你一次只读一行文件,所以在多行上进行匹配是不会成功的。
一次读取一行文件通常是最好的方法。所以我们可以使用 "flip-flip "操作符来实现这个目的。
$ perl -nle 'print if /Start Here/ .. /End Here/' your_file_here
改变输入记录的分隔符 ($/
)为空,使用 -0
命令行开关。
perl -0777nle 'print $1 if /(Start Here.*?)End Here/s' <<END
Start Here Some example
text covering a few
lines. End Here
THE_END
-0[octalhexadecimal] 指定输入记录分隔符 ($) 为八进制或十六进制数字。[...] 任何 0400 或以上的值都会导致 Perl 读取整个文件,但按照惯例,通常用于此目的的值是 0777。
IO::Handle->input_record_separator( EXPR ) $INPUT_RECORD_SEPARATOR $RS $ 输入记录的分隔符,默认为新行。 这影响了Perl对 "行 "的理解。[...] 你可以把它设置为[...]"undef "来读取文件的结尾。