Notepad++无批量去重功能,Remove Consecutive Duplicate Lines仅删除相邻重复行;真去重需先排序使重复行相邻,再用正则^(1\r?\n)\1+→\1(Windows)或^(2\n)\1+→\1(Linux/macOS)实现全局去重。\r\n ↩\r\n ↩

Notepad++ 没有“批量去重”按钮,Remove Consecutive Duplicate Lines 只删紧挨着的重复行,对真正分散的重复数据完全无效——直接点它,90% 的场景下等于白操作。
为什么 Remove Consecutive Duplicate Lines 总是失效
这个功能藏在 Edit → Line Operations → Remove Consecutive Duplicate Lines,但它只做一件事:比较当前行和上一行是否完全相同。只要中间夹了哪怕一行别的内容,就断开连续性,不再识别。
- 常见误用:文本是
apple、banana、apple,它会原样保留,因为两个apple不相邻 - 大小写敏感:
Apple和apple被视为不同行 - 首尾空格或制表符(
\t)会导致表面相同、实际不等,匹配失败 - 它不记录“是否见过”,只做局部比对,无法实现全局去重
用 Sort Lines Lexicographically Ascending + 正则才是真去重
这是唯一不依赖插件、兼容所有 Notepad++ 版本(包括 8.9.7)的可靠路径。核心逻辑是先让重复行物理相邻,再用正则精准捕获并只留首次出现的那行。
- 全选文本(
Ctrl + A),执行Edit → Line Operations → Sort Lines Lexicographically Ascending - 按
Ctrl + H打开替换窗口,搜索模式选Regular expression - 查找目标填:
^([^\r\n]*\r?\n)\1+(Windows 文本)或^([^\r\n]*\n)\1+(Linux/macOS 文本) - 替换为填:
\1(注意:不是留空,否则会多删一行) - 务必取消勾选
. matches newline,否则^和$会跨行失效 - 如果文本含大量空格或
\t,用[^\r\n]*替代.*更稳,避免贪婪匹配吞掉换行前字符
想保留原始顺序?必须加序号锚点再排序
Notepad++ 排序本身不保序(不是 stable sort),一旦排序,原始位置就彻底丢失。要还原,只能靠人工插入唯一序号作为锚点——这步漏掉,顺序就永远找不回来了。
- 用
Search → Column Mode Edit → Insert Number,起始值填1,增量填1,右对齐,在每行最左加序号(如1. apple) - 全选后执行
Sort Lines Lexicographically Ascending(此时整行排序,序号随内容被动移动) - 执行正则
^([^\r\n]*\r?\n)\1+→\1,删掉后续重复行(序号不同,但内容相同) - 最后用列编辑(
Alt + 鼠标拖选)框住左侧序号列(含小数点和空格),按Delete清除 - 若文本含中文或特殊符号,排序可能因编码错位,建议先
Encoding → Convert to UTF-8
真正容易被忽略的是:正则里的换行符类型必须和文件一致,\r?\n 对 Windows 有效,对 Linux 文件必须改成 \n;还有那个不起眼的 . matches newline 勾选项——一勾,整个正则就从按行匹配变成跨行乱匹配,删掉的可能是一整段而非单行。











