notepad++无真正一键去重功能,remove consecutive duplicate lines仅删相邻重复行;可靠去重需先排序再用正则^(.*\r?\n)\1+,或导出用python脚本按首次出现顺序去重。

Notepad++ 本身没有“一键去重”功能,所谓“利用文本整理插件一键去重”是常见误解——官方早已移除 TextFX 等旧插件,当前稳定版(7.9+)不自带真正去重能力,所有可靠方案都依赖排序 + 正则或外部脚本。
为什么「删除重复行」菜单项根本不管用
菜单里那个 Remove Consecutive Duplicate Lines(删除连续重复行)只处理相邻重复,比如三行连续的 apple 会剩一行,但若 apple 分散在第2、15、87行,它完全无感。这不是 bug,是设计如此——它等价于 Unix 的 uniq,不是哈希去重。
- 点一下就以为去重完成?大概率白忙活
- 该命令不读取全文,只逐行比对上一行,无法建立全局唯一集合
- 状态栏不会提示“已处理 X 行重复”,也没进度反馈,容易误判
真正能删掉所有重复行的正则写法
必须先排序,再用正则匹配连续块。直接上 ^(.*\r?\n)+ 是唯一内置可行路径,但细节错一点就失效:
- 务必先全选(
Ctrl + A),否则只处理光标后内容 - 替换对话框中勾选
Regular expression,禁用Match newline(否则^和$会跨行失效) -
\r?\n要写全:Windows 用\r\n,Linux/macOS 用\n,混用时\r?\n兼容性最好 - 替换后可能残留空行,需额外执行一次
移除空白行(包括空白字符)或正则^\s*$\r?\n - 别指望一次替换清完——重复多的文本要连点几次“全部替换”,直到提示“未找到匹配项”
想保留原始顺序?别硬刚正则
排序必然打乱原序,如果业务要求“首行出现的 apple 留下,后面所有 apple 都删”,正则方案天然不支持。这时候唯一靠谱做法是导出 + 外部脚本:
- 保存文件为
input.txt - 运行 Python 脚本:
with open('input.txt') as f: seen = set() for line in f: stripped = line.rstrip('\r\n') if stripped not in seen: print(line, end='') seen.add(stripped) - 关键点:
rstrip('\r\n')避免换行符干扰判断;print(line, end='')保持原换行风格 - 命令行执行:
python dedup.py > output.txt
最常被跳过的一步:删重复前没加行号锚定原序,排序后顺序全乱,你还以为去重成功了——其实只是把重复行挪到了一起,根本没删干净。











