我试图在多行上匹配一个模式。我想确保我在\ 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等。
答案 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代码之前有一个迷路$
。