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

在我们早期的教程之一中,我们讨论了一个Linux命令行实用程序 - 配音差异 - 它允许您逐行比较两个文件。 但是如果要求是比较两个而不是三个文件呢? 是的,还有一个Linux命令行实用程序,它被适当地称为diff3

如果您一直在寻找这样一个工具,那么看起来没有进一步的,就像本教程一样,我们将通过简单易懂的例子来解释diff3的用法。

But before we move forward, we would like you to know that all the examples mentioned in this tutorial have been tested on Ubuntu 14.04 with bash version 4.3.11(1), and the version of diff3 that we've used is 3.3.

安装diff3

diff3工具默认安装在系统上 - 至少在Ubuntu上。 但是如果不是这样,那么不要担心,因为您可以通过安装GNU Diffutils软件包轻松实现。 有关如何在系统上下载和安装软件包的说明,请点击此处

Diff3使用

因为diff3实用程序比较了三个文件,所以对于我们的使用示例,我们将需要将三个文件作为输入传递给该工具。

这是file1:

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

这是file2:

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中的变化。

这是file1:

This is line1
This is line2
This is line3

这是file2:

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包含“这是有一些变化的line1”作为第一行。

这就是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包含“这是line4”作为第四行,file3分别包含“This is line4”和“This is line5”作为第四行和第五行。 另一方面,file2只有3行。

所以这就是关于diff3的基本工作。 对于什么是值得的,这里的官方文档说明了这个工具:“ 你可以使用 diff3 命令显示三个文件之间的差异当两个人对一个共同的原件进行了独立的更改时, diff3 可以报​​告原来的和两个更改的版本,并且可以生成包含人员更改的合并文件以及关于冲突的警告。“

结论

我们刚刚在这里划伤了表面,Diff3能够做得更多。 例如,如官方文档还指出的,您也可以使用它来合并更改。 此外,还有许多命令行选项可让您自定义命令的输出以及访问其提供的其他功能。 这是在手册页上的所有内容 ,请详细阅读。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏