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

如何修改awk递归搜索脚本,改用文件中的多行模式进行检索?

递归多模式文本检索脚本实现

最终可执行脚本

#!/bin/bash

PATTERN_FILE="./patterns.txt"

# 检查模式文件是否存在
if [ ! -f "$PATTERN_FILE" ]; then
    echo "错误:模式文件 $PATTERN_FILE 不存在"
    exit 1
fi

find . -type f -name "*.txt" ! -name "patterns.txt" -exec awk -v pat_file="$PATTERN_FILE" '
BEGIN {
    # 读取所有模式存入数组
    while ((getline line < pat_file) > 0) {
        patterns[line] = 1
    }
    close(pat_file)
}
{
    # 检查当前行是否匹配任一模式
    for (pat in patterns) {
        if ($0 ~ pat) {
            print FILENAME " : " $0
            break
        }
    }
}
' {} +

脚本说明

  1. 模式文件检查:脚本启动时先确认patterns.txt存在,避免无意义执行
  2. 文件筛选:
    • -name "*.txt" 限定仅检索.txt后缀文件
    • ! -name "patterns.txt" 直接排除模式文件本身,符合需求
    • -exec ... {} + 批量传递文件给awk,比逐个处理更高效
  3. Awk核心逻辑:
    • BEGIN块提前读取所有模式到数组,避免重复打开模式文件
    • 遍历每个文件的每一行,匹配到任一模式后立即按文件名 : 匹配内容格式输出,break避免同一行匹配多模式时重复输出

之前尝试的问题分析

  • 第一个命令:硬编码单个搜索模式,未排除patterns.txt,且不支持多模式检索
  • 第二个命令:错误地将patterns.txt作为待检索文件传给awk,且awk脚本未正确读取模式规则,导致输出全部文件内容

使用方法

  1. 将上述脚本保存为search_patterns.sh
  2. 赋予执行权限:chmod +x search_patterns.sh
  3. 确保patterns.txt与脚本在同一目录(或修改脚本中PATTERN_FILE的路径)
  4. 运行脚本:./search_patterns.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:56:11