Sublime的“Remove Duplicate Lines”仅删除连续重复行,因其实现为相邻行比对而非全局去重;可靠去重需三步:先排序、再用正则^(.+)$[\r\n](^\1$[\r\n]{0,1})+匹配替换为\1\n,或安装Find Duplicate Lines插件实现全局去重。

Sublime 自带“Remove Duplicate Lines”只删连续重复行
很多人以为 Edit → Line → Remove Duplicate Lines 能一键去重全文件,结果发现只删掉了紧挨着的重复行(比如两行完全一样的 URL 连着出现),中间插了一行别的,就跳过了。这是因为该命令底层逻辑是“逐行比对相邻行”,不依赖排序,也不做全局哈希判重。
- ✅ 适用场景:日志里连续刷屏的报错、临时复制粘贴产生的相邻重复项
- ❌ 不适用:从不同来源拼接的列表(如 CSV 合并、API 返回混排)、未排序的配置项
- ⚠️ 容易踩坑:没排序就直接点这个菜单,会漏掉大量非连续重复——这是最常被忽略的前提条件
必须先排序,再用正则精准删除所有重复项
真正可靠的去重流程是三步:排序 → 正则匹配连续块 → 替换为单行。排序让相同内容聚集,正则才能一网打尽。
- 按
Ctrl + A全选,再按Ctrl + F9(或菜单Edit → Sort Lines)完成升序排序 - 按
Ctrl + H打开替换面板,勾选.*(正则模式),输入:
^(.+)$[\r\n](^\1$[\r\n]{0,1})+
- 替换框填:
\1\n - 点
Replace All—— 注意:可能需要点 2–3 次,直到提示“0 occurrences found” - ? 原理说明:
^\1$精确匹配上一行的全部内容,[\r\n]兼容 Windows/Mac/Linux 换行符,{0,1}容忍末尾空行
高频用户建议装插件 Find Duplicate Lines
如果你每周都要处理几百行以上的数据(比如接口返回的 ID 列表、SQL 查询结果、爬虫去重),手动排序+正则太慢,且容易漏点“忽略大小写”或“跳过空行”这类细节。
- 安装方式:
Ctrl + Shift + P→ 输入Package Control: Install Package→ 搜索Find Duplicate Lines→ 回车 - 使用时全选文本,再
Ctrl + Shift + P→ 输入Remove All Duplicates(不是“Consecutive”) - 插件优势:
Remove All Duplicates是真·全局去重,支持勾选“Case insensitive”“Ignore empty lines”等开关,一次到位
别忘了备份,正则误操作很难撤销
正则替换一旦点 Replace All,Sublime 默认不会把每行变化记为独立 undo 步骤——尤其是大文件,可能整块文本直接变空,Ctrl + Z 也回不全。
- 操作前务必
Ctrl + S保存副本,或用File → Save As…另存为xxx_cleaning_backup.txt - 如果已误删,别急着关窗口:Sublime 的 undo 栈在当前会话中仍存在,可尝试多次
Ctrl + Z;但若已执行其他编辑动作,大概率不可逆 - ⚠️ 最容易被忽略的一点:正则里的
\1必须和查找表达式中的(.+)严格对应,少一个括号或写成\2就会替换成空——这种错误不会报错,只会静默删光内容










