Notepad++ 比较两个文件并删除

Notepad++ 比较两个文件并删除

假设我有两个文件。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

一个老问题,但是......

  1. 在 WinMerge 中比较文件
  2. 工具 -> 生成补丁(保存)
  3. 补丁对两者进行了更改,但也有额外的标记。在 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
    
  4. 使用 notepad++ 中的 TextFX 插件,执行“工具”->“不区分大小写”排序(选择“输出 UNIQUE”选项),或“编辑”->“删除空白行”

有点脏,但我还没有找到可以一键完成此操作的工具。

答案3

减去notepad++ 中有两个文件(file1 - file2),您可以按照以下步骤操作:

  1. 建议:如果可能,删除两个文件上的重复项,特别是当文件很大时。具体操作如下:编辑 => 行操作 => 按字典顺序升序对行进行排序(对两个文件都执行此操作)
  2. 在文件 1 上添加----------------------------页脚(添加至少 10 个破折号)。这是将文件 1 内容与文件 2 分隔开的标记线。
  3. 然后将file2的内容复制到file1的末尾(标记之后)
  4. Control+H
  5. 搜索:(?m-s)^(?:-{10,}+\R[\s\S]*+|(.*+)\R(?=(?:(?!^-{10,}$)-++|[^-]*+)*+^-{10,}+\R(?:^.*+\R)*?\1(?:\R|\z))) 笔记:根据您的需要使用区分大小写
  6. 替换为:(leave empty)
  7. 选择Regular expression单选按钮
  8. 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

相关内容