Sublime Text 内置 Sort Lines (Unique) 仅能去重相邻重复行,非相邻重复需用正则匹配或外部工具如 awk、Python 处理,且需注意换行符统一和空白字符处理。

Sublime Text 去重用 Sort Lines 会误删非重复行
直接选中全文后点 Edit → Sort Lines,看起来去重了,其实只是把行按字母序排好,相同内容的行被挤到一起,但没删——你得手动再删重复。这不是去重,是排序。
真正去重必须配合「唯一性过滤」操作:
- 全选文本(
Ctrl+A或Cmd+A) - 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P) - 输入
Sort Lines,选中Sort Lines (Unique)—— 注意括号里带Unique的那个
这个命令本质是先排序、再合并相邻重复行,所以要求重复行必须挨着。如果原始文本里重复行分散在不同位置,它就无效。
重复行不相邻时,得用正则 + Find All 手动清理
比如日志里同一错误反复出现,但中间夹着时间戳或随机 ID,Sort Lines (Unique) 就完全失效。
这时候得靠正则匹配「整行内容」并标记所有重复项(保留第一个):
- 打开查找(
Ctrl+F/Cmd+F),勾选Regular Expression和Whole Line - 输入正则:
^(.*)(\n\1)+$—— 匹配连续出现的完全相同的行 - 但这个只能处理紧邻重复;更通用的是先用
^([^\r\n]+)\r?\n(?=.*^\1$)查找所有「后面还有相同行」的行(需开启Dot matches newline) - 点击
Find All,然后Ctrl+Shift+L把所有匹配转为多光标,再按Delete删掉——注意别删第一处
风险点:正则里 ^ 和 $ 在 Sublime 中默认按 \n 分界,但 Windows 换行符是 \r\n,若文件混用换行符,^ 可能错位,建议先统一用 File → Line Endings → Unix。
插件 Remove Duplicate Lines 看似方便,实则不可靠
很多人搜教程装了同名插件,结果发现它只删「完全相同的连续行」,和内置 Sort Lines (Unique) 能力差不多,甚至更弱——不排序、不保证顺序、不支持跨段落去重。
而且该插件已多年未更新,Sublime Text 4 下部分功能失效,比如对大文件(>50MB)会卡死或静默失败。
- 如果你真需要稳定去重,推荐用外部工具:保存文件后,在终端运行
awk '!seen[$0]++' file.txt > dedup.txt - 或者用 Python 一行:
python3 -c "print(''.join(dict.fromkeys(open('file.txt'))))" > dedup.txt - Sublime 内置的
Filter Lines命令(需安装 Package Control 后搜索安装)比插件更轻量,支持正则过滤,但同样不解决「非相邻重复」问题
去重后顺序乱了?那是你没关掉 Sort 步骤
Sort Lines (Unique) 本质是「排序 + 去重」,原始顺序必然丢失。如果业务要求保留首次出现顺序(比如配置项、URL 列表),就不能用它。
此时唯一办法是导出后用脚本处理,例如 Python:
with open('input.txt') as f:
seen = set()
for line in f:
line = line.rstrip('\n\r')
if line not in seen:
print(line)
seen.add(line)
注意 line.rstrip() 很关键——否则 'abc' 和 'abc '(带空格)会被视为不同行;而 Sublime 自带功能完全不处理首尾空白,容易漏掉逻辑重复。
真正的难点从来不在「怎么点菜单」,而在你是否清楚:重复的定义是什么?是整行字符一致,还是语义等价?后者 Sublime 做不了,得换工具。











