sublime text 原生无真正保序全局批量去重功能,需用正则^(.*$)\n(?=.*^\1$)并严格统一换行符、清理行尾空格;大文件建议用awk或filter lines插件。

Sublime Text 没有真正“批量去重”的原生命令——所谓“一键”,要么只删相邻重复(Remove Duplicate Lines),要么打乱顺序(Sort Lines: Unique)。你要的“保序 + 全局 + 批量”,必须靠正则或插件,且每一步都得踩准前提。
为什么 Remove Duplicate Lines 总是删不干净
它不是扫描全文,只比对「当前行」和「上一行」字节是否完全一致。中间隔一行,哪怕内容一模一样,也直接跳过。
- 三行是
apple→banana→apple,第二个apple不会被删 -
"abc"和"abc "(末尾空格)算两行,不会匹配 - 文件混用
和,^和$锚点会错位,匹配失败 - 没全选时,只作用于当前光标所在段落,不是全文
- 不忽略大小写:
Apple和apple视为不同
保序去重只能用 ^(.*$)
(?=.*^$) 正则
这是 Sublime 原生唯一能保留原始顺序、且只删后续重复项(首行自动跳过)的方案,但必须严格满足前提条件。
- 先统一换行符:菜单
File → Line Endings → Unix(否则匹配失效) - 打开查找面板(
Ctrl+F),勾选Regular Expression和Whole Line - 右下角点
.*按钮启用. matches newline - 输入
^(.*$) (?=.*^$),点Find All—— 所有非首次出现的重复行会被高亮 - 按
Ctrl+Shift+L转多光标,再按Delete - 若仍有残留,说明存在行尾空格干扰,先执行
Find → Replace,查找s+$,替换为空,再跑正则
大文件(>5 万行)别硬扛 Sublime 正则
超过这个量级,Sublime 的正则引擎响应变慢、内存飙升、甚至漏匹配。这不是你正则写错了,是它的底层限制。
- 实测 10 万行日志,
^(.*$) (?=.*^$)可能卡顿数秒 - 零宽字符(
u200B)、BOM、混合编码都会导致匹配失败 - 更稳的做法是甩给系统命令:Linux/macOS 终端执行
awk '{print NR, $0}' file.txt | sort -k2 -k1n | uniq -f1 -D | cut -d' ' -f2- - 或装
Filter Lines插件(Package Control 安装后,命令面板搜Filter Lines: Unique),它底层用 Pythonset(),容错性远高于原生正则
真正容易被忽略的,不是正则怎么写,而是换行符统一和空格清理这两步——90% 的“正则不生效”问题,都卡在这儿。











