![Notepad++ 比较两个文件并删除](https://linux22.com/image/1354281/Notepad%2B%2B%20%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E5%B9%B6%E5%88%A0%E9%99%A4.png)
假设我有两个文件。file1.txt 和 file2.txt
两个文件都包含鞋类品牌名称列表(1000 多个名称),如下所示:
品牌1 品牌2 品牌3 品牌...
现在 - 我想比较文件 1 与文件 2,删除所有重复出现的条目,并且只显示文件 1 中不在文件 2 中的内容,反之亦然。
换句话说,目标是查看对面的文件中不存在的内容,因为这些条目将被手动输入到两个不同类别的产品后台,以便它们最终匹配/相同。
答案1
Notepad++ 的“比较”插件可以解决问题吗?
您可以从 Notepad++ 插件菜单安装它=> 插件管理器=> 比较 1.5.6
官方描述如下:一个非常有用的 diff 插件,可以显示两个文件之间的差异(并排显示)。作者:Ty Landercasper,目前由 Jean-Sebastien Leroy 维护和更新来源:http://sourceforge.net/projects/npp-plugins/files/ComparePlugin/Compare_1_5_5_src.zip/download
答案2
一个老问题,但是......
- 在 WinMerge 中比较文件
- 工具 -> 生成补丁(保存)
补丁对两者进行了更改,但也有额外的标记。在 notepad++ 中,执行以下操作进行替换:
Search Mode: Regular Expression Find What: ^[0-9-].*$ Replace With: <blank> Replace All
。
Search Mode: Regular Expression Find What: (<|>) Replace With: <blank> Replace All
- 使用 notepad++ 中的 TextFX 插件,执行“工具”->“不区分大小写”排序(选择“输出 UNIQUE”选项),或“编辑”->“删除空白行”
有点脏,但我还没有找到可以一键完成此操作的工具。
答案3
到减去notepad++ 中有两个文件(file1 - file2),您可以按照以下步骤操作:
- 建议:如果可能,删除两个文件上的重复项,特别是当文件很大时。具体操作如下:编辑 => 行操作 => 按字典顺序升序对行进行排序(对两个文件都执行此操作)
- 在文件 1 上添加
----------------------------
页脚(添加至少 10 个破折号)。这是将文件 1 内容与文件 2 分隔开的标记线。 - 然后将file2的内容复制到file1的末尾(标记之后)
- Control+H
- 搜索:
(?m-s)^(?:-{10,}+\R[\s\S]*+|(.*+)\R(?=(?:(?!^-{10,}$)-++|[^-]*+)*+^-{10,}+\R(?:^.*+\R)*?\1(?:\R|\z)))
笔记:根据您的需要使用区分大小写 - 替换为:
(leave empty)
- 选择
Regular expression
单选按钮 - Replace All
如果 file1/file2 可能有与标记相等的行,则可以修改标记。在这种情况下,您必须调整正则表达式。
顺便说一句,您甚至可以录制一个宏来执行所有步骤(添加标记、切换到文件 2、将内容复制到文件 1、按下一个按钮应用正则表达式。
編輯:
更改了正则表达式以添加一些改进:
- 速度相关:
- 尽可能避免回溯
- 避免在标记后寻找
- 可用性:
- 允许使用破折号作为线条。但分隔符仍然是
^-{10,}$
- 可与文字以外的其他字符配合使用
- 允许使用破折号作为线条。但分隔符仍然是
速度比较:
所以基本上是 78 毫秒对 1.6 秒。这是一个不错的改进!这使得比较千字节大小的文件成为可能。
您可能仍想使用一些专用程序来比较或减去更大的文件。
答案4
对于那些寻找类似且不受 Notepad++ 约束的人来说,这iphonedroid 的优秀答案表明 diff 应该能够完成这项工作:
要显示没有上下文、行号、+、-、<、>!等的添加和删除,你可以像这样使用 diff:
diff --changed-group-format='%<%>' --unchanged-group-format='' a.txt b.txt
例如,给定两个文件:
文本文件
Common
Common
A-ONLY
Common
文本文件
Common
B-ONLY
Common
Common
以下命令将显示从 a 中删除或添加到 b 的行:
diff --changed-group-format='%<%>' --unchanged-group-format='' a.txt b.txt
# Output
B-ONLY
A-ONLY
这个略有不同的命令将显示从 a.txt 中删除的行:
diff --changed-group-format='%<' --unchanged-group-format='' a.txt b.txt
# Output
A-ONLY
最后,此命令将显示添加到 a.txt 的行
diff --changed-group-format='%>' --unchanged-group-format='' a.txt b.txt
# Output
B-ONLY