notepad++无批量删除重复行按钮,需用排序+正则组合或python script插件实现;remove consecutive duplicate lines仅删相邻重复,非真正去重;正则^(.*\r?\n)\1+须匹配换行符类型且禁用matches newline;保序需先加序号再排序最后删序号。

Notepad++ 没有“批量删除重复行”按钮,原生功能只能间接实现
Notepad++ 从 7.9 版起已彻底移除 TextFX 插件,官方不再提供 Sort outputs only UNIQUE 这类一键去重入口。所谓“插件快速去重”,实际只有两个可靠路径:一是用 Python Script 插件写逻辑,二是靠原生排序+正则组合。任何声称“装个插件点一下就完事”的方案,要么过时(依赖已下架的 TextFX),要么隐含风险(第三方未签名插件)。
用 Remove Consecutive Duplicate Lines 为什么总删不干净
这个菜单命令藏在 Edit → Line Operations → Remove Consecutive Duplicate Lines,但它只处理物理上紧挨着的重复行。比如文本是:
apple banana apple apple
它只会删掉最后一组连续的 apple,留下前两个 apple —— 因为中间隔着 banana。所以它本质不是“去重”,而是“压缩相邻重复”。常见误用场景:
- 没先排序就直接点它,结果重复行分散,几乎无效
- 文本含首尾空格或不可见字符(如
\t),导致表面相同实则不等 - 大小写混用(
Apple和apple被视为不同行)
正则替换 ^(.*\r?\n)\1+ 失效的三个硬坑
这个表达式是去重核心,但极易因环境细节崩掉:
-
Search Mode必须选Regular expression,不是Normal或Extended;勾选错模式会导致 \1 无法反向引用 - 换行符类型要匹配:Windows 文本用
\r?\n,Linux/macOS 文本必须改成\n,否则正则根本找不到换行位置 -
Matches newline一定不能勾选——一旦勾选,^和$会跨行生效,\1可能匹配到非预期的跨行内容,删掉整段而非单行
更稳的写法是把 .* 换成 [^\r\n]*,避免贪婪匹配吞掉换行符前的空格或制表符。
想保留原始顺序?必须加序号锚点再排序
排序会打乱原始行序,这是所有纯排序方案的死穴。真要保序,得人工锚定:
- 先用
Search → Column Mode Edit → Insert Number在每行开头插入递增序号(起始 1,增量 1) - 全选 →
Edit → Line Operations → Sort Lines Lexicographically Ascending(此时按内容排序,序号跟着动) - 执行正则
^(.*\r?\n)\1+→\1删除相邻重复 - 最后用列编辑选中左侧序号列,
Delete清除
这四步缺一不可。漏掉序号,排序后你就再也找不回哪行原本在哪儿——这不是 bug,是 Notepad++ 的设计限制。











