在日常的 Linux 系统管理和脚本编写中,我们经常会遇到需要对文本中的重复行或字符串进行去重处理的情况。无论是日志分析、数据清洗还是配置文件整理,掌握 Linux Shell字符串去重 的方法都是一项非常实用的技能。本文将手把手教你几种常用且高效的去重方法,即使是初学者也能轻松上手!
为什么需要字符串去重?
想象一下,你有一个包含成千上万行 IP 地址的日志文件,其中很多 IP 是重复出现的。如果你只想知道有哪些唯一的 IP 地址,就需要把重复项去掉。这时候,Shell文本处理 工具就派上用场了。
方法一:使用 uniq 命令(最基础)
uniq 是 Linux 中专门用于去除相邻重复行的命令。注意:它只能去除连续重复的行,因此通常要配合 sort 使用。
示例:
$ echo -e "apple\nbanana\napple\ncherry\nbanana" > fruits.txt$ cat fruits.txtapplebananaapplecherrybanana$ sort fruits.txt | uniqapplebananacherry
这里先用 sort 将内容排序,使相同行相邻,再用 uniq 去重。这是最经典的组合,也是 uniq命令使用 的标准姿势。
方法二:直接使用 sort -u(推荐)
其实,sort 命令本身就带有去重功能,只需加上 -u 参数(unique 的缩写),即可一步完成排序和去重。
$ sort -u fruits.txtapplebananacherry
这种方法更简洁高效,是日常工作中最常用的 Linux去重技巧 之一。
方法三:使用 awk 进行高级去重
如果你不想改变原始顺序(即不去排序),可以使用 awk 来实现“保留首次出现”的去重逻辑。
$ awk '!seen[$0]++' fruits.txtapplebananacherry
解释:seen 是一个关联数组,记录每行是否出现过。!seen[$0]++ 表示如果当前行($0)还没出现过,就输出并标记为已出现。
方法四:处理字段级别的去重
有时你只想根据某列(比如第2列)去重,而不是整行。这时可以用 awk 指定字段:
$ echo -e "1 apple\n2 banana\n3 apple\n4 cherry" > data.txt$ awk '!seen[$2]++' data.txt1 apple2 banana4 cherry
总结
- ✅
sort -u:最简单高效,适合大多数场景。 - ✅
sort | uniq:传统组合,功能可扩展(如统计重复次数)。 - ✅
awk '!seen[$0]++':保持原始顺序,灵活强大。 - ✅ 字段级去重:用
awk指定列,精准控制。
掌握这些 Linux Shell字符串去重 方法,你就能轻松应对各种文本处理任务。赶快在你的终端里试试吧!

