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

如何用awk筛选包含指定CRITERIA的PATTERN1与PATTERN2间文本块?

使用AWK筛选指定模式间包含关键词的文本块

我来帮你搞定这个需求!用AWK完全可以实现,而且逻辑清晰、灵活度高。下面直接上可运行的解决方案,再给你拆解细节:

核心AWK脚本

awk -v pattern1="start" -v pattern2="end" -v criteria="DCE" '
    # 匹配到起始模式时,标记进入块并初始化存储变量
    $0 ~ pattern1 { 
        in_block = 1
        block = ""
    }
    # 处于块内时,持续累加内容(保留换行符)
    in_block { 
        block = block $0 ORS
    }
    # 匹配到结束模式时,检查块内是否包含关键词,符合条件则输出
    $0 ~ pattern2 {
        in_block = 0
        if (block ~ criteria) {
            printf "%s", block
        }
    }
' input.txt

脚本说明

  • 变量传递:用-v参数把起始模式、结束模式和筛选关键词作为变量传入,不用硬编码到脚本里,后续修改参数非常方便。
  • 块状态管理:用in_block标记是否处于两个模式之间的文本块内,确保只处理目标区间的内容。
  • 块内容存储:用block变量累加整个块的内容(包括换行符ORS,保证输出格式和原文本一致)。
  • 筛选逻辑:遇到结束模式时,检查存储的块内容是否包含指定关键词,只有符合条件的块才会被输出。

示例验证

用你提供的输入文本测试:

start 123 ABC 123 end start 123 DCE 123 end start 123 EFG 123 end

运行脚本后,输出结果正好是你需要的:

start 123 DCE 123 end

额外注意事项

  • 如果你的pattern1、pattern2或criteria包含正则特殊字符(比如.、*、?),想要精确匹配而非正则匹配的话,可以用GNU AWK的\Q...\E语法转义,把判断条件改成block ~ "\\Q" criteria "\\E"即可。
  • 这个脚本支持多行文本块,即使起始和结束模式不在同一行,也能正确捕获整个块并筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:56:09