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

如何使用grep提取无重复的字符串模式 解决输出重复问题

grep匹配结果按目标字符串去重方案

方案1:保留原输出的文件名、行号信息,每个目标字符串仅保留第一条匹配记录

直接在原有grep命令后拼接awk处理逻辑即可:

grep -Enro --exclude=\*features.cc --exclude=\*.h --exclude=\*switches.cc '\bk[A-Z]\w*' ./* | awk -F: '!seen[$NF]++'

逻辑说明:

  • 原有grep输出格式为文件路径:行号:匹配到的字符串,以冒号为分隔符时,$NF代表每行最后一个字段,也就是你要匹配的k开头目标字符串
  • awk用关联数组seen记录每个字符串的出现次数,第一次遇到该字符串时!seen[$NF]结果为真,会打印当前行;后续再遇到相同字符串时判断为假,跳过输出,刚好实现保留首次匹配记录的需求

方案2:仅需要去重后的目标字符串列表,不需要来源信息

可以给grep增加-h参数取消输出文件名、行号前缀,再去重:

grep -Eroh --exclude=\*features.cc --exclude=\*.h --exclude=\*switches.cc '\bk[A-Z]\w*' ./* | awk '!seen[$0]++'

该方案输出结果仅为所有匹配到的无重复k开头字符串,保留首次出现的顺序。

可选:不要求保留出现顺序的简化写法

如果不需要保留字符串首次出现的先后顺序,可以用sort -u替换awk部分,写法更简单:

# 保留来源信息的版本
grep -Enro --exclude=\*features.cc --exclude=\*.h --exclude=\*switches.cc '\bk[A-Z]\w*' ./* | sort -t: -k3 -u
# 仅输出字符串的版本
grep -Eroh --exclude=\*features.cc --exclude=\*.h --exclude=\*switches.cc '\bk[A-Z]\w*' ./* | sort -u

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:54:03