我需要在单词 START 和文件结尾之间找到包含单词 find 的行。
我已经尝试了这个,但除非我指定END模式,否则不起作用:
perl -ne 'if ((/START/ .. /.*\s*/) && /find/) {print "$_"} else {print "\n"}' file
答案 0 :(得分:1)
范围运算符的结束表达式是一个正则表达式,其中所有内容都是可选的/.*\s*/
,因此它将匹配每一行,并且范围将始终在它开始的同一行终止。< / p>
您可以使用文件结束测试将范围扩展到最后一行。与此同时,您可以使用条件运算符而不是if
/ else
来整理。
这将按照你的要求行事。
perl -ne 'print((/START/ .. eof) && /find/ ? $_ : "\n")' myfile
答案 1 :(得分:0)
尝试以下
perl -lne '$p=1 if /START/; print if $p && /find/' file
编辑 (根据OP的评论)
如果找到匹配项,我会打印该行,否则我会打印一个空行。
perl -lne '$p=1 if /START/; if ($p && /find/) {print $_} else {print ""}' file