remove duplicate lines 命令仅删除相邻重复行,因其底层逻辑是逐行比对上一行,不建哈希表、不扫描全文;例如apple、banana、apple中第二个apple不会被删除。

Remove Duplicate Lines 命令本身**不全局去重**,它只删掉和上一行完全相同的相邻重复行。不排序就直接用,大概率漏掉 90% 的重复项。
为什么 Remove Duplicate Lines 总是删不干净?
这个命令的底层逻辑就是「逐行比对上一行」,没有缓存、不建哈希表、不扫描全文。比如这三行:
apple banana apple
第二个 apple 不会被删——因为它的上一行是 banana,不是 apple。
- 它对空格、大小写、BOM、混合换行符(
\r\n和\n并存)极度敏感 - 行尾多一个空格或 Tab,就被视为不同行
- 文件含零宽字符(U+200B)时,肉眼不可见但判重失败
Sort Lines: Unique 是 Sublime 4.4+ 最省事的方案
如果你用的是 Sublime Text 4.4 或更新版本(当前最新为 4.4.1),不用插件、不用正则,一条命令就能完成「排序 + 保留首行去重」:
- 全选文本(
Ctrl+A或Cmd+A) - 调出命令面板(
Ctrl+Shift+P/Cmd+Shift+P) - 输入
Sort Lines: Unique,回车执行
它等价于 Linux 的 sort -u,自动按字典序排好再去重,且默认保留每组重复中的第一行。想绑定快捷键?在 Preferences → Key Bindings 里加:
[{"keys": ["ctrl+alt+u"], "command": "sort_lines", "args": {"unique": true}}]
要保留原始顺序?别碰 Sort Lines,用正则或插件
代码、日志、配置项这类对顺序敏感的文本,排序会彻底打乱逻辑。此时必须绕过排序:
一款AI音频处理工具,主要用于通过向 `toingg/make_campaign` API 发送 POST 请求,提交用户提供的 JSON 数据,创建并启动 Toingg 语音呼叫活动,适用于 Codex 将活动简报……,适合需要提升相关任务效率的用户。
- 打开替换面板(
Ctrl+H),勾选Regular Expression和. matches newline - 查找框填:
^(.*$)\n(?=.*^\1$)(注意:开头的^和结尾的$在 Sublime 中默认按\n分界) - 替换框留空,点
Replace All
这个正则只匹配「后面还有相同行」的那些行,首行永远保留。但注意:
- 文件混用换行符时,先统一成 Unix(
File → Line Endings → Unix) - 超 10MB 文件容易卡顿,建议改用
Filter Lines插件(Package Control 安装后,命令面板搜Filter Lines: Unique)
大文件、复杂规则、CSV 多列去重?别硬刚内置功能
原生能力只认「整行完全一致」。以下情况它直接失效:
- 两行是
"apple,123"和"apple, 123"(空格差异) - 想按 CSV 第二列去重,而不是整行
- 需要忽略大小写(
Apple和apple算重复)
这时候该切到终端:
- Linux/macOS:
sort -uf file.txt > dedup.txt(-f忽略大小写) - Windows PowerShell:
Get-Content file.txt | Sort-Object -Unique -CaseSensitive - 通用 Python 一行:
python3 -c "print(''.join(dict.fromkeys(open('file.txt'))))" > dedup.txt
真正容易被忽略的,不是“怎么删”,而是“什么是重复”——没先定义清楚字段、空格、大小写、换行符的处理边界,所有操作都在赌运气。










