查找模式和文件结尾之间的行?

时间:2013-11-20 09:37:34

标签: perl

我需要在单词 START 和文件结尾之间找到包含单词 find 的行。

我已经尝试了这个,但除非我指定END模式,否则不起作用:

perl -ne 'if ((/START/ .. /.*\s*/) && /find/) {print "$_"} else {print "\n"}' file

2 个答案:

答案 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