Perl 是否查找图案和文件结尾之间的线条?

Perl 是否查找图案和文件结尾之间的线条?,perl,Perl,我需要在单词START和文件结尾之间找到包含单词find的行 我已经尝试过这个方法,但除非我指定一个结束模式,否则它不会起作用: perl -ne 'if ((/START/ .. /.*\s*/) && /find/) {print "$_"} else {print "\n"}' file 试着跟随 perl -lne '$p=1 if /START/; print if $p && /find/' file 编辑(根据OP的评论) 如果找到匹配项,则打印

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

我已经尝试过这个方法,但除非我指定一个结束模式,否则它不会起作用:

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

perl -lne '$p=1 if /START/; print if $p && /find/' file
编辑(根据OP的评论)


如果找到匹配项,则打印该行,否则打印空行

试着跟随

perl -lne '$p=1 if /START/; print if $p && /find/' file
编辑(根据OP的评论)


如果找到匹配项,则打印该行,否则打印空行


range运算符的结束表达式是一个正则表达式,所有内容都是可选的
/.*\s*/
,因此它将匹配每一行,并且范围将始终终止于它开始的同一行

您可以使用文件结束测试使范围扩展到最后一行。同时,如果/
else
,您还可以使用条件运算符而不是
来整理内容

这会满足你的要求

perl -ne 'print((/START/ .. eof) && /find/ ? $_ : "\n")' myfile

range运算符的结束表达式是一个正则表达式,所有内容都是可选的
/.*\s*/
,因此它将匹配每一行,并且范围将始终终止于它开始的同一行

您可以使用文件结束测试使范围扩展到最后一行。同时,如果
/
else
,您还可以使用条件运算符而不是
来整理内容

这会满足你的要求

perl -ne 'print((/START/ .. eof) && /find/ ? $_ : "\n")' myfile

它适用于初始表单,但我编辑并添加了其他{print“\n”}。@georgiana_e抱歉,不理解您的更新要求。你能解释一下吗?也许最好更新有问题的内容。如果找到匹配项,我会打印该行,否则我会打印一个空行。我需要这样做,因为我将对另一个文件应用diff,并且我希望保留行号。@georgiana_e请在solution.print“”中选中EDIT;在Perl中,不打印任何内容—Perl的打印不输出行尾。你可以使用say“”;以更现代的字体或打印“\n”;在旧的Perls中。它适用于初始表单,但我编辑并添加了其他{print“\n”}。@georgiana_e抱歉,不理解您的更新要求。你能解释一下吗?也许最好更新有问题的内容。如果找到匹配项,我会打印该行,否则我会打印一个空行。我需要这样做,因为我将对另一个文件应用diff,并且我希望保留行号。@georgiana_e请在solution.print“”中选中EDIT;在Perl中,不打印任何内容—Perl的打印不输出行尾。你可以使用say“”;以更现代的字体或打印“\n”;在较旧的Perls中,+1。紧凑而纯粹的perl方式。矿山源自awk实践+1。紧凑而纯粹的perl方式。我的是从awk实践中衍生出来的。