Remove Duplicate Lines仅删相邻重复行,因不建哈希表、不扫描全文;Sort Lines: Unique会重排顺序;保序去重需用正则^(.*$)\n(?=.*^\1$)并严格预处理。

Remove Duplicate Lines 为什么删不掉非相邻重复行
这个命令只比对「当前行和上一行是否字节完全一致」,不建哈希表、不扫描全文。比如三行内容是 apple → banana → apple,第二个 apple 不会被删——它上一行是 banana,不是重复源。
常见失效场景包括:
- 行尾多一个空格或
\t,就被判为不同行 - 文件混用
\r\n和\n,匹配直接中断 - 存在零宽字符(如
\u200B)时,肉眼不可见但判重失败 - 未全选文本就执行,它只处理当前光标所在段落
Sort Lines: Unique 会彻底打乱原始顺序
这是 Sublime Text 4.4+ 原生命令,等价于 sort | uniq:先按字典序重排,再合并相邻重复。结果是 zebra 一定排在 apple 前面,不管原文谁先出现。
必须注意:
- 保留的是排序后每组里的第一行,不是原文中第一次出现的那行(
Apple和apple共存时,Apple可能被留) - 含数字的字符串(如
log2.txt、log10.txt)会按 ASCII 排(log10排在log2前),需额外装 Natural Sort 插件 - 必须先统一换行符为 Unix(
File → Line Endings → Unix),否则排序错位
保序去重只能靠正则 ^(.*$)\n(?=.*^\1$)
这个正则能精准匹配「后面还有相同行」的所有重复行(首行自动跳过),适合 import 列表、配置项等顺序敏感场景,但它很娇气。
实操前必须做三件事:
- 菜单
File → Line Endings → Unix统一换行符,否则^和$在\r\n下错位 - 查找面板勾选
Regular Expression和. matches newline(点右下角.*按钮) - 先执行
Find → Replace,查找\s+$,替换为空,清除尾部空白干扰
输入 ^(.*$)\n(?=.*^\1$) 后,点 Find All,再按 Ctrl+Shift+L 转多光标,最后按 Delete。
大文件或字段级去重别硬刚内置功能
超过 5MB 或含 CSV、大小写混杂、字段内空格差异时,Sublime 正则容易卡死或漏匹配。
更可靠的做法:
- 装
Filter Lines插件(Package Control 可装),命令面板搜Filter Lines: Unique,性能更稳 - 需要提取哪些行被重复了?用
Filter Lines: Duplicates先看重复项列表 - 真要按列去重、忽略空格、或处理带引号的 CSV,直接切到终端:
awk '!seen[$1]++' file.csv(按第 1 列去重)
正则保序方案看似简单,但预处理步骤缺一不可——少做一步,就可能漏掉最后一行重复项,而你根本看不出哪里出了问题。











