Remove Duplicate Lines 仅删除相邻重复行,非全局去重;其原理为逐行比对上下行,不缓存全文、不处理空格/BOM/换行符差异;保序去重应优先用正则^(.*$)\n(?=.*^\1$)或awk/python外部命令。

Remove Duplicate Lines 不是全局去重快捷键,它只删相邻重复行——按了没反应、删不干净,不是你操作错,是它本来就不干这事。
为什么 Remove Duplicate Lines 总是“失灵”
这个命令底层就是个「当前行 vs 上一行」的逐行比对器,不建哈希表、不缓存全文、不跨行扫描。
- 三行内容是
apple→banana→apple,第二个apple完全不会被删,因为它上一行是banana - 空格、制表符、BOM、零宽字符(如
\u200B)都会导致判定失败:"abc"和"abc "被视为两行 - Windows 的
\r\n和 Unix 的\n混用时,换行符差异直接让匹配失效 - 没全选文本就调用?它只作用于当前光标所在段落,不是全文
Sort Lines + Remove Duplicate Lines 组合的风险点
这是最常被当成“标准流程”的误用组合,看似能清掉重复,实则埋雷。
-
Sort Lines会彻底打乱原始顺序:日志时间戳错位、函数声明顺序颠倒、CSV 表头移位,都不可逆 - 大小写敏感:
Apple和apple排序后不挨着,Remove Duplicate Lines根本不识别为重复 - 含数字的字符串(如
log2.txt、log10.txt)字典序错排,需额外装Natural Sort插件补零 - 混合换行符下排序结果错位,后续去重漏删——建议先统一换行符:
File → Line Endings → Unix
真正保序去重:正则 ^(.*$)\n(?=.*^\1$) 怎么用才不翻车
这个正则目标明确:只删「后面还有相同行」的所有重复行,首行不动。但它很娇气,细节一错就失效。
- 必须先统一换行符:
File → Line Endings → Unix,否则^和$在\r\n下错位 - 打开查找面板(
Ctrl+F),勾选Regular Expression和Whole Line;若文本含多行内容,还要点右下角.*启用. matches newline - 输入
^(.*$)\n(?=.*^\1$)后,先点Find All,再按Ctrl+Shift+L转多光标,最后按Delete——首行自动跳过 - 仍有残留?大概率是尾部空格干扰,先跑一次
Find → Replace,查找\s+$,替换为空,再重试
大文件或复杂规则,别硬刚 Sublime 内置功能
超过 5 万行,Sublime 的正则和排序就会明显卡顿,内存占用陡增;而 CSV 多列去重、忽略大小写、按某字段比对等需求,原生命令完全无解。
- 更稳的选择是外部命令:
awk '!seen[$0]++'(Linux/macOS)或python -c "import sys; seen=set(); [print(l.strip()) for l in sys.stdin if l.strip() not in seen and not seen.add(l.strip())]" - 插件不是越多越好:
Filter Lines(支持Filter Lines: Unique)和Find Duplicate Lines(支持Remove All Duplicates)是唯二真正解决保序去重的插件 - 所有操作前务必备份——Sublime 的撤销栈(
Ctrl+Z)只在当前会话有效,关窗口即丢

















