sublime text多行去重不能只用remove duplicate lines,因其仅删除相邻重复行;保序需正则^(.*$)\n(?=.*^\1$)匹配非首重复行,全局去重推荐sort lines: unique(4.4+)。

Sublime Text 对选中的多行去重,不能只靠 Remove Duplicate Lines —— 它只删相邻重复,选中再执行也一样漏删。
为什么 Remove Duplicate Lines 对选中内容无效
这个命令底层是流式比对:读一行,和上一行比,相同就跳过。它不扫描全文、不建哈希表、不关心你是否全选。哪怕你用鼠标框住 100 行,只要其中重复行不挨着(比如第 3 行和第 87 行相同),它就完全无视。
- 三行内容为
foo→bar→foo,选中全部后执行Remove Duplicate Lines,结果仍是三行 - 它对空格、
\r\nvs\n、BOM、零宽字符(U+200B)全部敏感,肉眼一样的两行可能被判为不同 - 不区分大小写,也不支持按列或子串匹配——它只认「整行字节级一致」
Sort Lines: Unique 是最快捷的全局去重方式(4.4+)
如果你不介意顺序被打乱(比如处理纯数据列表、ID 集合、无结构文本),这是最稳的选择。它等价于 sort -u,先排序再合并相邻重复,一步到位。
- 必须用 Sublime Text 4.4 或更新版本(当前最新为 4.4.1)
- 操作:全选 →
Ctrl+Shift+P→ 输入Sort Lines: Unique→ 回车 - 注意:它保留的是「排序后每组重复的第一行」,不是原文中第一次出现的那行;
log2.txt和log10.txt会错序,需 Natural Sort 插件或手动补零 - 快捷键需手动绑定:
{"keys": ["ctrl+alt+u"], "command": "sort_lines", "args": {"unique": true}}
要保序?用正则 ^(.*$)\n(?=.*^\1$) 手动标记再删
这是原生支持的唯一可靠保序方案,适用于代码 import 列表、配置项、带时间戳日志等顺序敏感场景。它只匹配「后面还有相同行」的重复实例,首行自动跳过。
- 先统一换行符:
File → Line Endings → Unix(避免\r\n干扰^和$) - 打开查找面板
Ctrl+F,勾选Regular Expression和Whole Line - 输入
^(.*$)\n(?=.*^\1$),点击Find All—— 所有非首次重复行会被高亮 - 按
Ctrl+Shift+L转为多光标,再按Delete - 大文件(>5MB)易卡顿;若匹配失败,先清理空行和行尾空格:
^[ \t]*$和[ \t]+$
插件方案:真正需要“一键查重+去重+审计”时才装
别一上来就装一堆插件。真正值得用的只有两个:
-
Filter Lines:执行Filter Lines: Duplicates可提取所有重复行(每组只出一次),再执行Filter Lines: Unique得到去重后结果——适合校验、对比、生成报告 -
Advanced CSV:仅当处理含引号、嵌套换行、逗号分隔的 CSV 时才启用,支持按列去重,不会误伤字段内内容 - 其他所谓“一键去重”插件,底层仍是调用上述逻辑,还可能引入编码兼容问题或性能拖累
去重前没想清楚「什么是重复」——是整行?某几列?是否忽略空格或大小写?——工具再强也白搭。顺序、空白、换行符、编码,四个点里错一个,结果就不可信。











