sublime 的 remove duplicate lines 只删除相邻重复行,非全局去重;需先排序再正则替换,或使用 find duplicate lines 插件的 remove all duplicates 功能。

Sublime 的 Remove Duplicate Lines 为什么删不干净?
它只删相邻重复行,不是全局去重——这是最常被误用的核心原因。比如三行内容全是 apple,但中间夹着一行 banana:applebananaapple
这时 Remove Duplicate Lines 完全不会动这两行 apple,因为它只比对“上一行和当前行”是否相同。
- 该命令底层逻辑是逐行扫描 + 相邻比较,不建哈希表,也不排序
- 菜单路径是 Edit → Line → Remove Duplicate Lines,快捷键无默认绑定
- 即使你全选文本、反复点它,只要重复项不挨着,就永远漏删
- 大小写敏感、空格敏感、行尾换行符差异(
\r\nvs\n)都会导致判定失败
先排序,再正则替换:最稳的零插件方案
排序让所有重复内容聚在一起,之后用正则精准匹配连续重复块,就能一次清掉全部冗余行。这个组合不依赖插件,兼容所有 Sublime 版本,且可逆可控。
- 全选文本(
Ctrl + A) - 调出命令面板(
Ctrl + Shift + P),输入Sort Lines并回车 - 再按
Ctrl + H打开替换面板,点击右下角.*启用正则模式 - 查找框填:
^(.*)(\r?\n)\1(\r?\n)?(匹配两行及以上完全相同的连续行) - 替换框填:
\1\2(保留第一行 + 原换行符) - 点
Replace All,若提示“Replaced X occurrences”,再点一次直到显示“0 occurrences found”
用 Find Duplicate Lines 插件省事但要注意选项
装了插件后,Remove All Duplicates 确实能跳过排序直接全局去重,但它默认保留第一次出现的行——这点和 SQL 的 GROUP BY + MIN(id) 逻辑一致,适合大多数场景;但如果你需要保留最后一次出现的,它不支持。
- 安装方式:先确保有
Package Control,再Ctrl + Shift + P→Package Control: Install Package→ 搜Find Duplicate Lines - 全选后命令面板搜
Remove All Duplicates,它会自动做哈希判重,不依赖顺序 - 注意:插件默认保留首行,不提供“保留末行”或“按某列排序后保留”的高级策略
- 若文本含大量空行或首尾空白,建议先用
^\s*$正则清理,否则空行也会被当作有效行参与去重
别在没备份时直接操作大文件
Sublime 的撤销栈(Ctrl + Z)只在当前会话中有效,一旦关闭窗口或执行其他编辑动作(比如另存为、切换标签页),就无法恢复误删内容。尤其处理几百行以上的日志、SQL 结果或爬虫输出时,风险极高。
- 操作前务必复制一份到新标签页,或用系统剪贴板暂存原始内容
- 如果已粘贴进 Sublime 但还没保存,关之前别点“Don’t Save”,先
Ctrl + A→Ctrl + C备份到外部记事本 - 正则替换时若忘了关大小写敏感,
Apple和apple就算不同行;想忽略大小写,替换面板里要点右下角Aa图标关闭










