Notepad++无法直接提取两文件共有行,需用Sort+Find in Files组合或命令行处理;Compare类工具专为找差异设计,不支持导出相同行纯文本列表,且行尾符、空格、编码不一致会导致匹配失败。

Notepad++ 本身不支持直接比对两文件共有行
Notepad++ 的「查找」和「比较」插件(如 Compare)只能标出差异,不能提取交集。想得到两个文件都出现的行,得借助外部工具或内置功能组合——最稳、最快的方式是用 Sort + Find in Files 配合正则,或者导出到命令行处理。
用「Sort」+「Find in Files」手动提取共有行(适合小文件,
前提是两文件都是纯文本、每行语义独立(比如日志 ID、配置项、域名列表),且无多余空格或编码差异。操作逻辑是:把文件 A 的每一行,当作关键词去搜索文件 B 是否存在。
- 先确保文件 A 和文件 B 都已打开,且文件 A 中**每行唯一、无重复**(如有重复,先选中全文 → 右键 →
Line Operations → Remove Consecutive Duplicate Lines) - 切换到文件 A,按
Ctrl+A全选 → 右键 →Line Operations → Sort Lines Lexicographically Ascending(排序便于后续去重) - 再右键 →
Line Operations → Remove Duplicate Lines - 回到文件 B,按
Ctrl+F打开查找窗口,切到Find in Files标签页 - 在
Find what输入:^.*$(匹配任意非空行),勾选Regular expression和Match whole word only - 在
Directory中填入文件 A 所在路径,File filter填fileA.txt(替换成你实际的文件名) - 点击
Find All—— 结果窗格里只显示那些**同时出现在文件 A 和文件 B 中的行**(因为 Notepad++ 会把文件 A 的每一行当作一个独立搜索词,在文件 B 中逐行匹配)
⚠️ 注意:这个方法依赖 Find in Files 的“多关键词搜索”隐式行为,实际生效的前提是文件 A 已保存、路径正确、且文件 B 是当前活动标签页。如果结果为空,大概率是文件 A 路径填错,或文件 B 编码与文件 A 不一致(比如一个是 UTF-8 with BOM,一个是 ANSI)。
用 PowerShell 或 cmd 快速取交集(推荐,准确且可复现)
Windows 自带的 PowerShell 就能一行搞定,比图形界面更可靠,尤其适合批量或大文件:
Get-Content fileA.txt | Where-Object { $_ -in (Get-Content fileB.txt) } | Set-Content common_lines.txt
说明:
-
Get-Content默认按行读取,自动处理换行符差异(\r\nvs\n) -
Where-Object { $_ -in ... }是 PowerShell 的成员判断,等价于“这一行是否在文件 B 的行集合里” - 如果文件很大(>100MB),建议先用
Sort-Object -Unique去重再查,否则内存占用高 - 注意两文件编码需一致;若报错
Illegal characters in path,说明路径含中文或空格,用引号包住路径即可:"C:\my files\fileA.txt"
为什么不用「Compare」插件或第三方 diff 工具
像 Compare 插件、WinMerge、Beyond Compare 这类工具,核心目标是「找不同」,它们把相同行视为「无需关注的背景」,默认折叠或跳过。即使开启「显示相同行」选项,也无法一键导出这些行的纯文本列表——你得手动拖选、复制、去重、清理行号和标记符号。而真正需要共有行时,往往是要喂给下游脚本或做数据校验,中间多一步人工干预就容易出错。
真正麻烦的点不在操作步骤,而在行边界和编码一致性:哪怕只是文件 A 末尾多一个空格、文件 B 某行是 CRLF 而 A 是 LF,都会导致匹配失败。所以别省那一步「先用 Encoding → Convert to UTF-8 统一编码,再用 Edit → Blank Operations → Trim Trailing Space 清理空格」。


















