sublime text 没有真正的多行去重黑科技,关键在于明确定义重复标准、是否保序及文件规模;remove duplicate lines 仅比对相邻行,sort lines: unique 会打乱顺序,保序需用特定正则并统一换行符。

Sublime Text 没有“多行去重黑科技”——所谓秒变大神,其实是搞清三件事:重复怎么定义、顺序要不要保、文件有多大。
Remove Duplicate Lines 为什么总删不干净
这个命令不是全局扫描,它只比对「当前行和上一行是否字节完全一致」。中间插一行别的,就彻底失效。
- 三行内容为
apple→banana→apple,第二个apple不会被删 -
apple和apple(末尾多一个空格)被视为两行 - 文件混用
\r\n和\n时,哪怕内容一样也判为不同 - 光标没全选中目标区域,它只处理当前选中段落,不是全文
Sort Lines: Unique 要先确认你能不能接受顺序被打乱
这是 Sublime Text 4.4+ 原生命令,等价于 sort -u,但原始顺序会彻底丢失。
- 它保留的是字典序最小的那行,不是原文中第一次出现的那行(比如
Apple和apple共存时,Apple可能被删) - 必须先统一换行符为 Unix(
File → Line Endings → Unix),否则排序错位 - 若含数字字符串(如
log2.txt、log10.txt),默认排序会把log10.txt排在log2.txt前面 - 快捷键需手动绑定:
{"keys": ["ctrl+alt+u"], "command": "sort_lines", "args": {"unique": true}}
保序去重只能靠正则 ^(.*$)\n(?=.*^\1$),但细节决定成败
这个正则匹配「后面还有相同行」的所有重复行(首行自动跳过),适合代码 import 列表、配置项等顺序敏感场景。
- 必须先统一换行符为 Unix(
File → Line Endings → Unix),否则^和$错位 - 查找面板中务必勾选
Regular Expression和. matches newline(点右下角.按钮) - 输入
^(.*$)\n(?=.*^\1$)后,先点Find All,再按Ctrl+Shift+L转多光标,最后按Delete - 如果替换后仍有残留,大概率是尾部空格干扰,先执行
Find → Replace,查找\s+$,替换为空,再跑正则
大文件或复杂规则别硬刚内置功能
超过 5MB 或含 CSV、大小写混杂、字段内空格差异时,Sublime 正则容易卡死或漏匹配。
- 装
Filter Lines插件(Package Control 可装),命令面板搜Filter Lines: Unique,性能更稳 - 需要提取哪些行被重复了?用
Filter Lines: Duplicates先看重复项列表 - 真要按列去重、忽略空格、或处理带引号的 CSV,直接切到终端:
awk '!seen[$0]++' file.txt或 Python 脚本更可靠 - 别信名字叫
Remove Duplicates的插件——多数只是包装了原生Remove Duplicate Lines,逻辑没变
真正卡住人的从来不是“怎么删”,而是没想清“什么是重复”:是整行字节一致?还是某几列相同?是否允许首尾空格差异?这点没定,后面所有操作都是在碰运气。











