remove duplicate lines 命令仅删除相邻重复行,因其行为等同 unix uniq,不缓存、不全文扫描、严格字节匹配;全局去重需先排序再正则剔除,或用命令行/python 脚本保序处理。

Remove Duplicate Lines 命令根本不能全局去重,它只删相邻重复行——这是你反复点却总“漏删”的唯一原因。
为什么 Remove Duplicate Lines 总是不生效?
这个命令的行为和 Unix 的 uniq 完全一致:只比较当前行与上一行是否**字节级完全相同**,不建缓存、不扫描全文、不忽略任何空白。
- 输入
apple→banana→apple,第二个apple不会被删(中间隔了banana) -
hello和hello(末尾多一个空格)被视为两行 - Windows 的
\r\n与 Linux 的\n混用时,哪怕内容一样也判为不同 - 文件开头有 UTF-8 BOM(
)会导致首行实际不匹配
真正能全局去重的三步法(零插件,兼容所有版本)
排序让重复项聚堆,正则精准剔除后续重复——这是最稳、最可控的路径。
- 全选文本:
Ctrl+A(或Cmd+A) - 排序:
Ctrl+Shift+P→ 输入Sort Lines→ 回车 - 打开替换面板:
Ctrl+H,勾选.*(启用正则) - 查找框填:
^(.*$)\n^\1$,替换框留空 - 点
Replace All,直到提示 “0 occurrences found”
注意:^ 和 $ 在 Sublime 中默认按 \n 分界;若文件含 \r\n,可改用 ^(.*$)\r?\n^$ 更保险。
想保留原始顺序?别碰 Sort Lines
排序会打乱日志时间线、代码执行顺序、配置项依赖关系——这时候必须绕开排序逻辑。
- 用正则
^(.*$)\n(?=.*^\1$)(需开启. matches newline)匹配“后面还有相同行”的所有重复行,再Ctrl+Shift+L转多光标后手动删(首行自动保留) - 或直接运行 Python 控制台脚本:
Ctrl+`粘贴并执行(注意先全选目标区域) - 更省事:装
Find Duplicate Lines插件,全选后Ctrl+Shift+P→Remove All Duplicates,支持勾选Case insensitive、Ignore empty lines
大文件(>5 万行)或高频处理,别硬扛 Sublime
Sublime 的正则引擎在大文本下会卡顿甚至静默失败,内存占用陡增。
- Linux/macOS:
awk '!seen[$0]++' file.txt > dedup.txt(保序) - Windows PowerShell:
Get-Content file.txt | ForEach-Object { if ($seen[$_.Trim()]++ -eq 0) { $_ } } > dedup.txt - 跨平台 Python 一行:
python3 -c "print(''.join(dict.fromkeys(open('file.txt'))))" > dedup.txt
所有方法都对不可见字符敏感——处理前先用正则 \s+$ 清尾空格,比纠结命令更重要。











