perl binary stdin multiline regex

时间:2014-09-11 18:37:17

标签: regex perl multiline

我试图在多行上匹配一个模式。我想确保我在\ r \ n中寻找结尾的行,并且在某些时候有特定的文本。 I already tried in grep但如果没有某些版本没有的-P开关,它就无法运行。所以现在我在perl尝试。

我无法弄清楚为什么这不起作用:

echo -e -n "ab\r\ncd" | perl -w -e $'binmode STDIN;undef $/;$_ = <>;if(/ab\r\ncd/){print "test"}'

我在全球范围内启用了slurp模式(undef $/;),这种模式虽然草率但很好(我当然会采取更好的想法)。如果我只是做print并将其传递给od,我可以看到$ _包含正确的字节。正则表达式应匹配相同的字节,但由于某种原因不起作用。我可以匹配ab \ r \ n而不是ab \ r \ n等。

2 个答案:

答案 0 :(得分:4)

如果您从代码部分的开头删除了迷路$,则代码可以正常工作。

但是,可以通过使用某些命令行开关来加强它,例如-0777

echo -e -n "ab\r\ncd" | perl -0777 -ne 'print "test" if /ab\r\ncd/'

输出:

test

切换

  • -0777:按照perlrun
  • 中的说明对整个文件进行填充
  • -n:为输入文件中的每个“行”创建一个while(<>){...}循环。
  • -e:告诉perl在命令行上执行代码。

答案 1 :(得分:1)

适合我:

echo -e -n "ab\r\ncd" | perl -w -e 'binmode STDIN;undef $/;$_ = <>;if(/ab\r\ncd/){print "test"}';

输出:

test

你在perl代码之前有一个迷路$