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

如何无需复杂脚本实现递归grep names.txt每行内容并按顺序切换匹配目标

实现方案

方案1:简化版(每个姓名全量遍历目录,无需复杂逻辑)

这种实现最简单,仅需一行shell命令即可完成:

xargs -I {} grep -n "^{}:" /path/to/target/files/*.txt < names.txt

参数说明:

  • -I {} 指定{}为姓名的占位符,xargs会逐行读取names.txt的内容替换占位符
  • grep的-n参数可选,用于输出匹配结果所在的行号,不需要可以去掉
  • ^{}: 确保只会匹配行开头为对应姓名的条目,避免出现姓名部分匹配的错误结果

方案2:进阶版(从中断位置继续匹配,无冗余扫描)

完全符合你要求的「遇到不匹配就切换下一个姓名、从上次中断位置继续遍历」的需求,仅需一行awk命令即可实现,无需编写复杂脚本:

awk '
NR == FNR {
    names[++total] = $0
    next
}
FNR == 1 {
    current_file = FILENAME
}
{
    if (cur_idx <= total && index($0, names[cur_idx]":") == 1) {
        print current_file":"FNR":"$0
    } else {
        cur_idx++
    }
}
' names.txt $(ls -1 /path/to/target/files/*.txt | sort)

逻辑说明:

  • 第一部分先把names.txt里的所有姓名按顺序存入数组
  • 第二部分按字母顺序读取所有目标文件的内容,当前行匹配当前待查找的姓名就输出结果,一旦遇到不匹配的行就自动切换到下一个姓名,继续扫描后续内容,全程不会重复读取已经扫过的文件内容,效率远高于全量遍历方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:15:02