notepad++去重需分场景:允许乱序用排序+正则;保留原序须加序号锚点再排序;大文件或需智能处理(如忽略空白、大小写)则用python脚本。

Notepad++ 没有“删除所有重复行”的一键按钮,Remove Consecutive Duplicate Lines 只能删连续重复,对分散的重复行完全无效。真正能用的,只有排序+正则、加序号锚定、或 Python 脚本三类路径——选哪条,取决于你是否允许打乱原始顺序。
用 Sort Lines Lexicographically Ascending + 正则删相邻重复
这是最轻量、无需插件的方案,但会彻底丢失原始行序。适用于日志聚合、临时查重、或顺序无关的配置项清理。
-
Ctrl + A全选后,走Edit → Line Operations → Sort Lines Lexicographically Ascending - 再执行
Ctrl + H,勾选Regular expression,查找:^(.*\r?\n)\1+,替换为:\1 - 注意换行符:Windows 文本用
\r?\n,Linux/macOS 文本改用\n,否则正则不匹配 - 如果行尾有空格或制表符,
.*可能跨行或漏匹配,换成[^\r\n]*更稳 - 别忘了关闭
. matches newline选项,否则^和$会失效
保留原始顺序:必须加序号锚点再排序
想留原顺序?Notepad++ 原生不支持稳定排序,硬排序必然乱序。唯一可靠办法是先在每行前插入行号作为“锚点”,排序后再删掉它。
- 用
Search → Column Mode Edit → Insert Number,起始值填1,增量填1,给每行加序号前缀(如1. apple) - 全选 →
Edit → Line Operations → Sort Lines Lexicographically Ascending(此时按内容排序,但序号仍绑定原位置) - 正则替换:
^(.*\r?\n)\1+→\1,只删内容重复、序号不同的后续行 - 最后用列编辑选中左侧序号列(含小数点和空格),
Delete清除 - 若文本含中文或特殊符号,排序可能因编码或 locale 设置错位,建议先转为 UTF-8 编码(
Encoding → Convert to UTF-8)
用 Python Script 插件做真·顺序保留去重
当文件超大(>10MB)、或需忽略首尾空白/大小写时,Python 脚本比手动锚点更鲁棒。它逐行读取、用 set() 记录已见内容,跳过重复行,天然保序。
- 确认已安装
Python Script插件(Plugins → Plugin Manager → Available中搜索安装) - 新建脚本:
Plugins → Python Script → New Script,粘贴以下代码:
lines = notepad.getLines(0, notepad.getLength())
seen = set()
new_lines = []
for line in lines.split('\r\n'):
stripped = line.strip() # 忽略首尾空白
if stripped and stripped not in seen:
seen.add(stripped)
new_lines.append(line)
notepad.replaceSel('\r\n'.join(new_lines))
- 运行脚本前务必备份——它直接覆盖当前文档选区;若没选中全文,只处理选中部分
- 把
line.strip()改成line.lower().strip()可实现大小写不敏感去重 - 该脚本不处理 BOM、混合换行符(
\r\n和\n并存),大文件可能卡顿,建议先用Encoding → Encode in UTF-8统一格式
最容易被忽略的不是正则怎么写,而是第一步有没有备份、有没有确认换行符类型、以及——排序前到底要不要加序号。顺序一乱,你以为去重成功了,其实只是把重复行打散重排了一遍。











