Sublime怎么批量去重 Sublime怎么快速删除重复行【整理】

4次阅读

sublime 的 remove duplicate lines 只删除相邻重复行,非全局去重;需先排序再正则替换,或使用 find duplicate lines 插件的 remove all duplicates 功能。

Sublime怎么批量去重 Sublime怎么快速删除重复行【整理】

Sublime 的 Remove Duplicate Lines 为什么删不干净?

它只删相邻重复行,不是全局去重——这是最常被误用的核心原因。比如三行内容全是 apple,但中间夹着一行 banana
apple
banana
apple
这时 Remove Duplicate Lines 完全不会动这两行 apple,因为它只比对“上一行和当前行”是否相同。

  • 该命令底层逻辑是逐行扫描 + 相邻比较,不建哈希表,也不排序
  • 菜单路径是 Edit → Line → Remove Duplicate Lines,快捷键无默认绑定
  • 即使你全选文本、反复点它,只要重复项不挨着,就永远漏删
  • 大小写敏感、空格敏感、行尾换行符差异(rn vs n)都会导致判定失败

先排序,再正则替换:最稳的零插件方案

排序让所有重复内容聚在一起,之后用正则精准匹配连续重复块,就能一次清掉全部冗余行。这个组合不依赖插件,兼容所有 Sublime 版本,且可逆可控。

  • 全选文本(Ctrl + A
  • 调出命令面板(Ctrl + Shift + P),输入 sort Lines 并回车
  • 再按 Ctrl + H 打开替换面板,点击右下角 .* 启用正则模式
  • 查找框填:^(.*)(r?n)1(r?n)?(匹配两行及以上完全相同的连续行)
  • 替换框填:12(保留第一行 + 原换行符)
  • Replace All,若提示“Replaced X occurrences”,再点一次直到显示“0 occurrences found”

Find Duplicate Lines 插件省事但要注意选项

装了插件后,Remove All Duplicates 确实能跳过排序直接全局去重,但它默认保留第一次出现的行——这点和 sqlGROUP BY + MIN(id) 逻辑一致,适合大多数场景;但如果你需要保留最后一次出现的,它不支持。

  • 安装方式:先确保有 Package Control,再 Ctrl + Shift + PPackage Control: Install Package → 搜 Find Duplicate Lines
  • 全选后命令面板搜 Remove All Duplicates,它会自动做哈希判重,不依赖顺序
  • 注意:插件默认保留首行,不提供“保留末行”或“按某列排序后保留”的高级策略
  • 若文本含大量空行或首尾空白,建议先用 ^s*$ 正则清理,否则空行也会被当作有效行参与去重

别在没备份时直接操作大文件

Sublime 的撤销Ctrl + Z)只在当前会话中有效,一旦关闭窗口或执行其他编辑动作(比如另存为、切换标签页),就无法恢复误删内容。尤其处理几百行以上的日志、SQL 结果或爬虫输出时,风险极高。

  • 操作前务必复制一份到新标签页,或用系统剪贴板暂存原始内容
  • 如果已粘贴进 Sublime 但还没保存,关之前别点“Don’t Save”,先 Ctrl + ACtrl + C 备份到外部记事本
  • 正则替换时若忘了关大小写敏感,Appleapple 就算不同行;想忽略大小写,替换面板里要点右下角 Aa 图标关闭

排序这一步没法绕开,无论你用原生命令还是插件,背后逻辑都得靠它把同类数据“归”。很多人删完发现还剩一堆重复,回头一看——根本没排序。

text=ZqhQzanResources