使用Notepad++比较文件并仅返回差异

33

Notepad++有一个比较插件工具,用于比较文本文件,其操作步骤如下:

打开Notepad++并打开您想要运行比较检查的两个文件。

单击“插件”菜单。

选择“Compare”并单击“Compare”。

插件将运行比较检查,并将显示两个文件并排在一起,突出显示文本中的任何差异。

这是一个很好的功能,我已经愉快地使用了一段时间。现在,我一直在寻找一个选项,以进一步选择突出显示的不同行(例如通过删除非突出显示的行),或者反过来:即删除突出显示的行。

是否有一种简单的方法来实现这个目标?


你是不是想问的是 https://superuser.com/questions/562208/notepad-compare-two-files-and-remove? - Serge Fonville
4个回答

11

若想在Notepad++中对两个文件进行减法操作 (file1 - file2),可以按照以下步骤进行:

  1. 建议:如可能,先移除两个文件中的重复行,特别是当文件很大时。操作方法为:编辑 => 行操作 => 按字典序升序排序(在两个文件上都执行此操作)
  2. 在file1文件末尾添加一个至少包含10个短横线的注脚“----------------------------”以分隔file1和file2的内容。
  3. 然后将file2的内容复制到file1的结尾(即标记之后)
  4. Control + H
  5. 查找: (?m-s)^(?:-{10,}+\R[\s\S]*+|(.*+)\R(?=(?:(?!^-{10,}$)-++|[^-]*+)*+^-{10,}+\R(?:^.*+\R)*?\1(?:\R|\z))) 注意: 根据需要使用大小写敏感
  6. 替换为: (留空)
  7. 选择 正则表达式 单选按钮
  8. 全部替换

如果可能,您可以修改标记,因为file1/file2可能具有与标记相等的行。在这种情况下,您将不得不调整正则表达式。

顺便说一句,您甚至可以记录一个宏来执行所有步骤(添加标记,切换到文件2,将内容复制到文件1,按下一个按钮应用正则表达式)。

编辑:

更改了正则表达式以添加一些改进:

  • 与速度相关:
    • 尽可能避免回溯
    • 避免在标记后搜索
  • 可用性:
    • 允许使用破折号进行行分隔。但分隔符仍然是^-{10,}$
    • 适用于除单词之外的其他字符

速度比较:

新方法 vs 旧方法

基本上是78毫秒对1.6秒。所以有了很好的改进!这使得比较千字节大小的文件成为可能。

但是如果您想比较或减去更大的文件,您可能需要使用一些专门的程序。


增加了另一种选择。通常,如果文件不是很大并且我想看到图形比较,我会使用另一种方法,即使用Compare插件。对于大文件和仅获取结果,我使用这种方法。 - Julio
大文件处理速度极慢。 - chance
当然可以!如果你想要减去文件,有更好的替代方案。如果你想用notepad++做到这一点...你可以这样做或者开发自己的插件。无论如何,我已经改进了正则表达式,现在它应该更快了(对于我进行的一个测试,78毫秒比1.6秒快得多)。这使得比以前更大的文件可以进行比较。但是当然,如果文件太大,最终会变得太慢。 - Julio
非常棒的解决方案,完美地完成了我快速的任务。非常感谢正则表达式。 - Trusty_Investigator

2
我有一个“不太好”的解决方法。与“Control+C、Alt+Tab、Control+V;Control+C、Alt+Tab、Control+V;......”相比,它可以节省一些时间,但如果文件很大或两个文件的差异很大,则可能不值得使用。对于更大的文件,您可能更喜欢使用其他工具。
通常,这种方法在比较“单词”组时效果最佳,并且无法处理制表符内容(例如源代码)。
因此,解决方法如下:
  1. 可选:(取决于要比较的内容)对两个文件进行排序(这将使未来的比较更容易)。方法是:编辑 => 行操作 => 按字典顺序升序排序行(在两个文件上都执行)
  2. 使用插件比较文件
  3. 选择一个文件并检查您想要保留的行。在这些行的每一行之前添加一个制表符。请记住,您可以选择多行并按Tab键进行制表。可选地,您可以向要删除的行添加制表符
  4. 对文件进行排序。制表符行将首先出现。因此,现在您可以复制粘贴它们(或复制粘贴未制表的行)

1
如果差异不大,一个更快的方法可能只是使用键盘快捷键来为每个不同的行添加书签。从文件开头开始,按下 Alt+Page Down 来聚焦于第一个差异,然后按下 Ctrl+F2 添加书签。接着交替按下 Alt+Page DownCtrl+F2 直到最后一个差异。
当所有不同的行都被书签标记后,你可以使用 "搜索 -> 书签" 菜单下的任何操作:
- 剪切已标记行 - 复制已标记行 - 粘贴到(替换)已标记行 - 移除已标记行 - 移除未标记行

-2

把文件移到 Linux 系统上,然后执行 diff 命令: $ diff file1.txt file2.txt > file_diff.txt


3
毫无疑问,有很多提取文件差异的替代方案,但这不是问题所在。 - Gert Arnold
1
我最喜欢这种方法。 - muthuh
这是正确的答案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接