Remove Duplicate Lines 仅删除相邻重复行,因底层只比较当前行与上一行字节是否完全相同;三行 apple→banana→apple 中第二个 apple 不被删,因其前行为 banana。

Remove Duplicate Lines 不是合并重复行,它只删相邻重复;真要“合并”(比如把 apple 出现 3 次变成一行),得靠排序 + 正则或外部工具,且必须先明确定义“重复”标准——整行完全一致?忽略空格?大小写是否敏感?
为什么 Remove Duplicate Lines 不能合并重复行
这个命令底层不做全局扫描,只比对「当前行和上一行是否字节完全相同」。三行 apple→banana→apple,第二个 apple 前面是 banana,直接跳过。它不计数、不聚合、不合并,只是单向剔除相邻重复项。
常见失效场景包括:
- 行尾多一个空格或
\t,就被视为不同行 - 文件混用
\r\n和\n,哪怕内容一样也判为不同 - 未全选文本时,只处理光标所在段落,不是全文
- 存在零宽字符(如
\u200B)时,肉眼不可见但匹配中断
Sort Lines: Unique 是最省事的“去重”,但会打乱顺序
Sublime Text 4.4+ 原生命令,等价于 Linux 的 sort -u:先按字典序重排,再合并相邻重复行。它保留的是排序后每组中的第一行,不是原文中首次出现的那行。
使用前注意:
- 必须先统一换行符为 Unix(
File → Line Endings → Unix),否则排序错位 - 含数字字符串(如
log2.txt、log10.txt)会按 ASCII 排,log10排在log2前面 - 快捷键需手动绑定:
{"keys": ["ctrl+alt+u"], "command": "sort_lines", "args": {"unique": true}}
保序“合并”只能靠正则 ^(.*$)\n(?=.*^\1$)
这个正则匹配「后面还有相同行」的所有重复行(首行自动跳过),适合代码 import 列表、配置项等顺序敏感场景。但它非常娇气:
- 必须勾选
Regular Expression和. matches newline(点右下角.*按钮) - 查找框填
^(.*$)\n(?=.*^\1$),替换框留空,点Replace All - 若仍有残留,大概率是尾部空白干扰,先执行
Find → Replace,查找\s+$,替换为空,再跑正则 - Windows 文件若混用
\r\n和\n,可能匹配失败;建议先统一换行符
大文件或复杂规则,别硬刚内置功能
超过 5 万行或含 CSV、大小写混杂、字段内空格差异时,Sublime 正则容易卡死或漏匹配。
更稳的选择:
- 装
Filter Lines插件(Package Control 可装),命令面板搜Filter Lines: Unique,性能更稳 - 需要提取哪些行被重复了?用
Filter Lines: Duplicates先看重复项列表 - 真要按列去重、忽略空格、或处理带引号的 CSV,直接切终端:
awk '!seen[$0]++' file.txt(Linux/macOS)或python3 -c "import sys; print(''.join(dict.fromkeys(sys.stdin)))"

















