sublime text 多行去重需先明确“重复”定义:原生命令仅删相邻重复或需排序,保序全局去重须用正则^(.*$)\n(?=.*^\1$)并统一换行符;大文件或复杂规则应改用filter lines插件或终端awk/python。

Sublime Text 对选中的多行文本去重,没有“选中即去重”的傻瓜操作——它要么只删相邻重复(Remove Duplicate Lines),要么必须排序后才能全局去重(Sort Lines: Unique),而排序会打乱原始顺序。你得先决定:要不要保序?文件里有没有空格、换行符、大小写混用?
为什么 Remove Duplicate Lines 总是不生效
这个命令不是全局扫描,它只比对「当前行和上一行是否字节完全一致」,中间插一行别的,就彻底失效。
- 三行内容为
apple→banana→apple,第二个apple不会被删 -
apple和apple(末尾多一个空格)被视为两行 - 文件含 Windows 的
\r\n和 Unix 的\n混用时,哪怕内容一样也判为不同 - 光标没全选中目标区域,它只处理当前选中段落,不是全文
想全局去重但又不想打乱顺序:用正则 ^(.*$)\n(?=.*^\1$)
这是目前最可控的保序方案,它匹配「后面还有相同行」的所有重复行(首行自动跳过),适合代码、配置项、日志等依赖顺序的文本。
- 先统一换行符:
File → Line Endings → Unix,否则^和$可能错位 - 打开查找面板(
Ctrl+F),勾选Regular Expression和Whole Line - 右下角点
.*按钮启用. matches newline - 输入
^(.*$)\n(?=.*^\1$),点Find All - 按
Ctrl+Shift+L转多光标,再按Delete—— 首次出现的行不会被选中
大文件或需要更灵活规则时,别硬扛 Sublime 正则
超过 5 万行或含嵌套换行、CSV 字段内换行、大小写/空格需忽略时,Sublime 的正则引擎容易卡死或漏匹配。
- 装
Filter Lines插件(Package Control 可装),命令面板搜Filter Lines: Unique,性能更稳 - 需要提取哪些行被重复了?用
Filter Lines: Duplicates先看重复项列表 - 真要按列去重、忽略空格、或处理带引号的 CSV,直接切到终端:
awk '!seen[$0]++'或 Python 脚本更可靠 - 别信名字叫
Remove Duplicates的插件——多数只是包装了原生Remove Duplicate Lines,逻辑没变
真正卡住人的从来不是“怎么删”,而是没想清“什么是重复”:是整行字节一致?还是某几列相同?是否允许首尾空格差异?这点没定,后面所有操作都是在碰运气。











