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

如何在bash中打印两个匹配行之间的内容,排除含第三个匹配项的区间

解决方案

调整思路:你原来的逐行打印逻辑无法提前判断区间内是否存在Z,因此需要先缓存整个A到C区间的内容,待匹配到结束标记C时,判断区间内无Z再输出缓存内容即可。

调整后的awk代码如下:

'/A/{
    p=1
    has_z=0
    buf=""
}
p{
    buf = buf $0 "\n"
    if(/Z/) has_z=1
}
/C/{
    p=0
    if(!has_z) printf "%s", buf
}
' 目标文件名

代码逻辑说明:

  • 匹配到起始标记A时:开启区间记录状态,重置Z存在标记,清空区间缓存
  • 处于区间记录状态时:将每一行追加到缓存中,若当前行匹配Z则标记区间存在Z
  • 匹配到结束标记C时:关闭区间记录状态,若区间不存在Z则输出缓存的全量区间内容

针对你给出的示例文件运行上述代码,将直接输出你预期的结果。

内容的提问来源于stack exchange,提问作者Piotrek Cyran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:45:06