notepad++ 无真正一键去重功能,“排序并移除重复行”实为仅删相邻重复行;可靠方法是先升序排序使重复行聚集,再用正则^(.*\r?\n)\1+替换为\1;保序需插入序号锚点、排序、正则去重、删除序号四步;大文件建议用python脚本处理。

Notepad++ 没有真正意义上的“一键删除所有重复行”功能,所谓“编辑 → 行操作 → 排序并移除重复行”只是旧版菜单残留,实际点击后执行的是 Remove Consecutive Duplicate Lines —— 它只删紧挨着的重复行,对分散在全文各处的重复内容完全无效。
为什么 Remove Consecutive Duplicate Lines 不能当去重用
这个命令底层逻辑等同于 Unix 的 uniq:只比较相邻两行是否完全一致。比如这四行:
apple apple banana apple
它只会删掉第2行 apple(因为和第1行相同),而第4行 apple 前面是 banana,直接跳过。真实数据中重复行几乎从不连续,所以该命令在去重场景下等于失效。
- 大小写、首尾空格、不可见字符(如
\t或\u00A0)都会导致匹配失败 - 不记录已出现过的行,无法做全局哈希比对
- 即使你只想保留首次出现的那行,它也做不到
用 Sort Lines Lexicographically Ascending + 正则才是可靠路径
这是纯内置、零插件、全版本兼容的方法,核心是先让重复行聚集,再用正则精准捕获并仅留首行。
- 全选文本(
Ctrl + A),执行Edit → Line Operations → Sort Lines Lexicographically Ascending - 打开替换窗口(
Ctrl + H),勾选Regular expression模式 - 查找目标填:
^(.*\r?\n)\1+(\r?\n兼容 Windows/Linux 换行) - 替换为填:
\1(不是留空,否则会少一行) - 确保下方
. matches newline未勾选,否则正则可能跨行误匹配
注意:.* 在含制表符或混合空格的行里容易漏匹配,更稳写法是 ^[^\r\n]*\r?\n。
想保留原始顺序?必须加序号锚点再排序
Notepad++ 排序不是稳定排序,直接排序会彻底打乱原始位置。要恢复原序,得靠列编辑插入序号作为锚点:
- 先用
Search → Column Mode Edit → Insert Number,起始值1,增量1,在每行最左插入序号 - 全选 → 升序排序(此时内容排序,序号随行移动)
- 执行正则:
^(.*\r?\n)\1+→ 替换为\1 - 最后用列编辑框选最左序号列(按住
Alt拖选),按Delete清除
四步缺一不可。漏掉序号插入,结果顺序就全乱;漏掉序号清除,输出里会残留数字。
大文件或需严格保序?优先用外部 Python 脚本
Notepad++ 处理 >10MB 文本易卡顿,且 PythonScript 插件在新版中存在兼容风险(如 v2.0 不支持 Python 3.12)。更可靠的做法是导出后用终端脚本处理:
with open('input.txt') as f:
seen = set()
for line in f:
stripped = line.rstrip('\n\r')
if stripped not in seen:
print(stripped)
seen.add(stripped)
运行:python dedup.py > output.txt
-
rstrip('\n\r')避免换行符干扰判断 -
set()实现 O(1) 查找,百万行也能秒出 - 不依赖 Notepad++ 插件,规避编码、BOM、内存溢出等问题
最容易被忽略的其实是第一步:没加序号就去排序,结果顺序全乱了,你还以为去重成功了——其实只是把重复行重新排了队而已。











