如何在 Linux 中使用 diff3 工具比较三个文件如何在 Linux 中使用 diff3 工具比较三个文件如何在 Linux 中使用 diff3 工具比较三个文件如何在 Linux 中使用 diff3 工具比较三个文件
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 Linux 中使用 diff3 工具比较三个文件

发表 admin at 2025年2月28日
类别
  • 未分类
标签

在我们之前的一篇教程中,我们讨论了一个 Linux 命令行实用程序 - 称为 diff - 它允许您逐行比较两个文件。但是,如果要求比较的不是两个文件而是三个文件怎么办?是的,也有一个 Linux 命令行实用程序可以实现此目的,它的正确名称是 diff3。

如果您一直在寻找这样的工具,那么就不用再犹豫了。在本教程中,我们将通过易于理解的示例来解释 diff3 的用法。

安装差异3

diff3 工具可能会默认安装在您的系统上 - 至少在 Ubuntu 上是这样。但如果情况并非如此,请不要担心,因为您可以通过安装 GNU Diffutils 包轻松做到这一点。有关如何在系统上下载并安装该软件包的说明,请前往此处。

Diff3 用法

由于 diff3 实用程序比较三个文件,因此对于我们的使用示例,我们必须采用三个文件作为输入传递给该工具。

这是文件1:

This is line1 with some change
This is line2
This is line3

这是文件2:

This is line1
This is line2
This is line3

这是文件3:

This is line1
This is line2
This is line3

显然,如果我们查看这三个文件的内容,唯一的变化是第一个文件的第一行。现在让我们看看 diff3 如何报告此更改。

在这种情况下我们可以使用 diff3 的方法如下:

diff3 file1 file2 file3

这是它产生的输出:

====1
1:1c
 This is line1 with some change
2:1c
3:1c
 This is line1

您可以通过以下方式理解输出:

  • 以四个“=”符号开头并以数字“1”结尾的第一行表示更改位于第一个文件中。
  • 在下一行中,第一个“1”表示 file1;冒号后面的“1c”表示第一行包含。实际行显示在输出的下一行中。
  • 同样,2:1c 和 3:1c 表示“file2 和 file3 的第一行包含”。由于两个文件中的行内容相同,因此实际行仅在输出末尾显示一次。

为了让事情更清楚,让我们看另一种情况,其中更改位于 file3 中。

这是文件1:

This is line1
This is line2
This is line3

这是文件2:

This is line1
This is line2
This is line3

这是文件3:

This is line1 with some change
This is line2
This is line3

命令保持不变:

diff3 file1 file2 file3

这是输出:

====3
1:1c
2:1c
 This is line1
3:1c
 This is line1 with some change

因此,在这种情况下,输出可以理解为:

  • 更改位于 file3 中
  • file1 和 file2 都包含“This is line1”作为第一行
  • 而 file3 的第一行包含“This is line1 with somechanges”。

这就是 diff3 报告行如何变化的全部内容。现在让我们看看如果其中一个文件包含额外的行,diff3 的行为如何:

虽然 file1 和 file2 保持不变,但 file3 如下:

This is line1
This is line2
This is line3
This is line4

从其内容可以清楚地看出,file3 现在在末尾包含一个额外的行。

让我们运行相同的 diff3 命令:

diff3 file1 file2 file3

这是命令产生的输出:

====3
1:3a
2:3a
3:4c
 This is line4

输出首先表明更改位于 file3 中。更改位于 file3 的第四行 (3:4c),与 file1 和 file2 相比,这是一个新行。

到目前为止我们讨论的是一些简单的案例。让我们来看几个稍微复杂的情况。例如,考虑 file1、file2 和 file3 包含以下内容:

This is line1
This is line2 with some change
This is line3
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3 with some change

现在 file1 和 file2 都包含更改,并且也在不同的行中。让我们看看 diff3 在这种情况下会产生什么:

====
1:2,3c
 This is line2 with some change
 This is line3
2:2,3c
 This is line2
 This is line3
3:2,3c
 This is line2
 This is line3 with some change

正如您在上面显示的输出中看到的,第一行不包含任何数字。这是因为现在不是一个文件,而是多个文件包含更改。对于 diff3,所有三个文件的第 2 行和第 3 行现在都不同了。这就是为什么输出现在包含一个范围 - '2,3',而不是冒号 (:) 后面的单个数字,这意味着第 2 行到第 3 行。

我们再举一个例子。假设这次三个文件包含以下信息:

This is line1
This is line2
This is line3
This is line4
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3
This is line4
This is line5

现在,当运行 diff 命令时,它会产生以下输出:

====
1:4c
 This is line4
2:3a
3:4,5c
 This is line4
 This is line5

在这里,如果您尝试理解,diff3 命令表示更改位于所有三个文件的第 3 行之后。 file1 包含“This is line4”作为其第四行,而 file3 则分别包含“This is line4”和“This is line5”作为其第四行和第五行。另一方面,file2 只有 3 行。

这就是 diff3 的基本工作。无论如何,官方文档对该工具的描述如下:“您可以使用 diff3 命令来显示三个文件之间的差异。当两个人有对共同原始版本进行独立更改后,diff3 可以报告原始版本和两个更改版本之间的差异,并可以生成一个包含两个人的更改以及有关冲突的警告。”。

结论

我们在这里仅仅触及了皮毛,Diff3 能够做更多的事情。例如,正如官方文档也指出的那样,您也可以使用它来合并更改。另外,还有许多命令行选项可让您自定义命令的输出以及访问它提供的一些其他功能。手册页上都有这些内容,请仔细阅读。您可能还想查看我们的 sdiff 命令教程

©2015-2025 Norria support@norria.com