如何使用grep正则表达式提取文本文件中第一个逗号前的唯一首词?
解决提取文本中第一个逗号前唯一首词的问题
你的问题核心是之前的命令没有精准提取目标片段,而是输出了整行,导致去重操作无法生效。下面给你几个简单高效的解决方案,完全适配你的文本格式:
方法1:用awk(最简洁直观)
awk是处理字段分割场景的利器,直接指定逗号为分隔符,提取第一个字段后排序去重:
awk -F ',' '{print $1}' file.txt | sort -u
-F ',':告诉awk用逗号作为字段分隔符print $1:输出每行的第一个字段(也就是第一个逗号前的内容)sort -u:排序并自动去除重复项
方法2:用grep配合-o参数提取匹配内容
你之前的grep命令缺少了-o参数(只输出匹配到的部分,而非整行),调整后就能精准提取:
grep -o '^*[^,]*' file.txt | sort -u
-o:仅输出正则匹配到的内容,而不是整行^*[^,]*:正则表示从行首的*开始,匹配所有不是逗号的字符,直到遇到第一个逗号为止,刚好就是你要的首词部分
方法3:用sed替换掉多余内容
sed可以直接把逗号及后面的所有内容清空,留下目标部分:
sed 's/,.*//' file.txt | sort -u
s/,.*//:替换命令,把每行中第一个逗号(包括逗号)后面的所有内容替换为空,剩下的就是第一个逗号前的内容
效果验证
针对你的示例文本,这三个命令都会输出:
*pattern1 *pattern2 *pattern_4
完全符合你提取唯一首词的需求。
内容的提问来源于stack exchange,提问作者ewr3243
相关产品推荐
相关产品推荐

