Sublime如何快速删除重复行?(文本处理技巧)

1次阅读

sublime text 自带功能不能直接去重;需用正则匹配重复行后剪切,或安装 text pastry 插件执行 remove duplicates 命令实现可靠去重。

Sublime如何快速删除重复行?(文本处理技巧)

sublime text 自带功能能去重吗?

不能直接去重,但自带的 sort Lines 功能配合手动操作可以间接实现——前提是重复行必须相邻。真实文本里重复行往往散落各处,这时候靠排序再删相邻项不仅费时,还容易漏删或误删。

用正则 + Find All 快速标记所有重复行

核心思路是:先找出“后面还出现过”的某一行,把它选中,再一次性删除。关键在正则写法和操作顺序:

  • 打开 Find → Find...Ctrl+F),勾选 Regular ExpressionWhole Line
  • 输入正则:^(.*$)n(?=.*^1$) —— 它匹配“后面还有完全相同行”的当前行(含换行符)
  • Find All,所有可被删除的重复行(保留第一个)会被高亮选中
  • Ctrl+X 剪切,就完成了去重

注意:1 是反向引用,^$ 确保整行匹配;如果文本含空行或首尾空格不一致,这个正则会失效。

装 Package Control 后用 Text Pastry 插件更稳

原生命令和正则对多行重复、跨段落、大小写混杂等情况支持弱。Text Pastry 插件提供 Remove Duplicates 命令,逻辑更可靠:

  • 先装好 Package Control(没装的话搜 “Install Package Control sublime” 三分钟搞定)
  • Ctrl+Shift+P → 输入 Install Package → 搜 Text Pastry 并安装
  • 全选文本(Ctrl+A),再按 Ctrl+Shift+P → 输入 Remove Duplicates 回车

它默认保留首次出现的行,不依赖行序,也不吃空格/换行差异,比手写正则容错高得多。

为什么不用 Sort Lines + Unique?

因为 Sublime 的 Sort Lines 本身没有 Unique 选项。有人误以为排序后手动删相邻重复就行,但实际有三个坑:

  • 排序会打乱原始顺序,如果你依赖上下文位置(比如日志时间戳、配置项顺序),就不能用
  • Sort Lines 对中文、数字、特殊字符排序规则不直观,可能把 item10 排在 item2 前面
  • 没批量去重能力,只能靠眼睛扫,500 行文本里漏掉一两处重复几乎必然发生

真正省心的做法,是接受“去重 = 先标记再删”这个动作闭环,而不是幻想一键排序完事。

text=ZqhQzanResources