Linux中如何打印首匹配项与后续第二个匹配项之间的行
解决Perl范围提取的问题
你的问题出在原命令的范围操作符会重复触发,且未限制只提取第一个目标范围:
AAADD同时包含AAAD和AAA,会被/AAAD/../AAA/再次匹配并打印- 原命令没有停止机制,会继续处理后续行
正确命令1:匹配到目标AAA后直接退出
perl -lne 'print if /AAAD/../AAA/; last if /AAA/' p
这个命令在打印到第一个AAA时立刻终止程序,不会处理后面的AAADD。
正确命令2:用标记变量控制仅处理第一个范围
perl -lne 'BEGIN {$done = 0} unless ($done) { if (/AAAD/../AAA/) { print; $done = 1 if /AAA/ } }' p
通过$done变量标记提取完成状态,后续行不再参与匹配。
用你的测试数据执行后,都会得到预期输出:
AAAD BBB CCC AAA
内容的提问来源于stack exchange,提问作者Keshav Mathur
相关产品推荐
相关产品推荐

