You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:18:13