sublime text原生无保序全局去重功能,remove duplicate lines仅删相邻重复行;保序去重需用正则^(.*$) (?=.*^\1$)并统一换行符、清理空格,大文件建议用filter lines插件或系统命令。

Sublime Text 没有“超级好使”的一键去重功能——所谓好用,全看你怎么选路、怎么预处理、怎么避坑。 它的原生命令要么只删相邻重复(Remove Duplicate Lines),要么必须排序打乱顺序(Sort Lines: Unique)。真要保序、全局、稳定去重,得靠正则或插件,而且每一步都容易卡在换行符、空格、大小写这些细节上。
为什么 Remove Duplicate Lines 总是不生效
这个命令不是扫描全文找重复,它只做一件事:读当前行,和上一行比字节是否完全一致。只要中间隔了一行,哪怕内容一模一样,它就当没看见。
- 三行内容为
apple→banana→apple,第二个apple不会被删 -
apple和apple(末尾多一个空格)判为两行 - 文件混用
(Windows)和(Unix),哪怕内容相同也匹配失败 - 光标没全选中目标区域,它只处理你选中的那几行,不是全文
- 它不忽略大小写,也不支持按子串或列匹配——只认整行字节级相等
保序去重只能靠 ^(.*$)
(?=.*^$) 正则
这是 Sublime 原生唯一能保留原始顺序、且只删后续重复项(首行自动跳过)的方案,但必须严格满足前提条件,否则高亮错位、漏匹配、甚至卡死。
- 先统一换行符:
File → Line Endings → Unix,否则^和$在下会错位 - 打开查找面板(
Ctrl+F),勾选Regular Expression和Whole Line - 右下角点
.*按钮启用. matches newline - 输入
^(.*$) (?=.*^$),点Find All——所有非首次出现的重复行会被高亮 - 按
Ctrl+Shift+L转为多光标,再按Delete删除 - 仍有残留?说明存在行尾空格干扰,先用
[ ]+$替换为空,再跑正则
大文件(>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插件更可靠——它底层用 Pythonset()实现,对空格、大小写、换行符的容错性远高于原生正则 - 插件安装后,全选文本 →
Ctrl+Shift+P→ 输入Filter Lines: Duplicates,直接提取所有重复行;再执行Filter Lines: Unique得到干净结果
真正容易被忽略的,不是正则怎么写,而是换行符统一和空格清理这两步——90% 的“正则不生效”问题,都卡在这两个前置动作上。别急着点 Find All,先看一眼右下角显示的是 Unix (LF) 还是 Windows (CRLF),再扫一眼行尾有没有看不见的空格。











