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

Git Bash下多文件指定代码块匹配输出的多需求实现

针对.tr文件指定代码块的匹配解决方案

以下所有单行命令均适配Git Bash 2.35.1.windows.2,针对你的四个需求分别给出实现:

需求a:匹配内容前输出文件名,结果间加空行

该命令会在每个匹配到目标模式的文件前输出文件名,不同文件的匹配结果之间用空行分隔:

awk 'FNR==1{if(prev_printed) print ""; prev_printed=0} /# unique_start_tag/{in_block=1; next} /# unique_end_tag/{in_block=0} in_block && /5|55/{if(!file_printed[FILENAME]){print FILENAME; file_printed[FILENAME]=1; prev_printed=1} print}' *.tr
  • FNR==1:处理每个新文件时,若上一个文件有匹配结果则输出空行
  • /# unique_start_tag/{in_block=1; next}:进入目标代码块时标记状态并跳过标签行
  • /# unique_end_tag/{in_block=0}:退出代码块时取消标记
  • 仅在代码块内匹配到5或55时,先输出一次文件名,再打印匹配行

需求b:提取文件内ID行作为标识替代文件名

假设文件内ID行格式为ID : file1,该命令会提取此ID作为文件标识替代文件名输出:

awk '/^ID :/{id=$3} FNR==1{if(prev_printed) print ""; prev_printed=0} /# unique_start_tag/{in_block=1; next} /# unique_end_tag/{in_block=0} in_block && /5|55/{if(!id_printed[id]){print id; id_printed[id]=1; prev_printed=1} print}' *.tr
  • /^ID :/{id=$3}:提取ID行的第三列作为文件标识
  • 其余逻辑与需求a一致,仅将文件名替换为提取的ID

需求c:仅输出匹配的模式行而非完整代码块

该命令只打印代码块内匹配到5或55的行,不会输出整个代码块内容:

awk '/# unique_start_tag/{in_block=1} /# unique_end_tag/{in_block=0} in_block && /5|55/{print FILENAME": "$0}' *.tr
  • 仅在目标代码块内匹配到指定模式时,输出文件名: 匹配行的格式

需求d:输出时排除起止标签

上述所有命令均已自动排除# unique_start_tag和# unique_end_tag标签行:

  • 通过next跳过起始标签行的输出
  • 结束标签行仅用于切换状态,不会触发打印逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:04:57