如何在linux终端上比较两个文本文件

需要查看文本文件的两个版本之间的差异吗?那么diff就是你需要的命令。本教程向您展示了如何在Linux和macOS上使用diff,这是一种简单的方法。...

需要查看文本文件的两个版本之间的差异吗?那么diff就是你需要的命令。本教程向您展示了如何在Linux和macOS上使用diff,这是一种简单的方法。

潜入差异

diff命令比较两个文件并生成两个文件之间的差异列表。更准确地说,它生成了需要对第一个文件进行更改的列表,以使其与第二个文件匹配。如果你记住这一点,你会发现更容易理解diff的输出。diff命令被设计用来找出源代码文件之间的差异,并产生一个可以被其他程序读取和执行的输出,比如patch命令。在本教程中,我们将介绍使用diff的最有用的人性化方法。

让我们深入分析两个文件。命令行上文件的顺序决定了diff认为哪个文件是“第一个文件”,哪个文件是“第二个文件”。在下面的示例中,alpha1是第一个文件,alpha2是第二个文件。两个文件都包含拼音字母表,但第二个文件alpha2经过了进一步编辑,因此两个文件不完全相同。

我们可以用这个命令比较文件。键入diff、空格、第一个文件的名称、空格、第二个文件的名称,然后按Enter键。

diff alpha1 alpha2

如何在linux终端上比较两个文本文件

我们如何分析输出?一旦你知道该找什么就没那么糟了。每个差异依次列在一列中,并且每个差异都有标签。标签包含字母两边的数字,如4c4。第一个数字是alpha1中的行号,第二个数字是alpha2中的行号。中间的字母可以是:

  • c:第一个文件中的行需要更改以匹配第二个文件中的行。
  • d:必须删除第一个文件中的行才能与第二个文件匹配。
  • 答:必须在第一个文件中添加额外的内容,使其与第二个文件匹配。

我们示例中的4c4告诉我们,必须将alpha1的第四行更改为与alpha2的第四行匹配。这是diff发现的两个文件之间的第一个差异。

在我们的示例alpha1中,以<开头的行表示第一个文件,以>开头的行表示第二个文件alpha2。这一行<Delta告诉我们单词Delta是alpha1中第四行的内容。行>Dave告诉我们单词Dave是alpha2中第四行的内容。总结一下,我们需要在alpha1的第四行用Dave替换Delta,使这两个文件中的行匹配。

下一个变化由12c12指示。应用同样的逻辑,这告诉我们alpha1的第12行包含Lima这个词,但是alpha2的第12行包含Linux这个词。

第三个变化是指从alpha2中删除的一行。标签21d20被破译为“需要从第一个文件中删除第21行以使两个文件从第20行开始同步”。<统一行显示需要从alpha1中删除的行的内容。

第四个差异标记为26a26,28。此更改涉及已添加到alpha2的三个额外行。注意标签上的26,28。用逗号分隔的两个行号表示一系列行号。在本例中,范围是从第26行到第28行。标签被解释为“在第一个文件的第26行,从第二个文件中添加第26到28行”。这些词包括古怪、奇怪和魅力。

一句俏皮话

如果您只想知道两个文件是否相同,请使用-s(报告相同的文件)选项。

diff -s alpha1 alpha3

如何在linux终端上比较两个文本文件

您可以使用-q(brief)选项获得关于两个文件不同的同样简洁的语句。

diff -q alpha1 alpha2

如何在linux终端上比较两个文本文件

需要注意的一点是,对于两个相同的文件,-q(brief)选项完全不公开,根本不报告任何内容。

另一种观点

-y(并排)选项使用不同的布局来描述文件差异。在并排视图中使用-W(width)选项通常很方便,可以限制显示的列数。这避免了让输出难以读取的难看的环绕行。这里我们告诉diff生成并排显示,并将输出限制为70列。

diff -y -W 70 alpha1 alpha2

如何在linux终端上比较两个文本文件

命令行上的第一个文件alpha1显示在左侧,命令行上的第二行alpha2显示在右侧。将并排显示每个文件中的行。在alpha2中的那些行旁边有一些已被更改、删除或添加的指示符。

  • |:第二个文件中已更改的行。
  • <:已从第二个文件中删除的行。
  • >:已添加到不在第一个文件中的第二个文件的行。

如果您希望更紧凑地并排总结文件差异,请使用--suppress common line选项。这将强制diff只列出更改、添加或删除的行。

diff -y -W 70 --suppress-common-lines alpha1 alpha2

如何在linux终端上比较两个文本文件

添加一点颜色

另一个名为colordiff的实用程序将颜色高亮显示添加到diff输出中。这样就更容易看出哪些行有差异。

如果您使用的是Ubuntu或其他基于Debian的发行版,请使用apt get将此软件包安装到您的系统上。在其他Linux发行版上,请改用Linux发行版的包管理工具。

sudo apt-get install colordiff

像使用diff一样使用colordiff。

如何在linux终端上比较两个文本文件

实际上,colordiff是diff的包装器,diff在幕后完成所有工作。因此,所有的diff选项都将使用colordiff。

如何在linux终端上比较两个文本文件

提供一些背景

为了在屏幕上显示文件中的所有行和只列出更改的行之间找到一些中间点,我们可以要求diff提供一些上下文。有两种方法可以做到这一点。两种方法都达到了相同的目的,即在每一行更改之前和之后显示一些行。您将能够在检测到差异的地方看到文件中发生了什么。

第一个方法使用-c(复制的上下文)选项。

colordiff -c alpha1 alpha2

如何在linux终端上比较两个文本文件

diff输出有一个标题。头文件列出了两个文件名及其修改时间。第一个文件名前有星号(*),第二个文件名前有破折号(-)。星号和破折号将用于指示输出中的行属于哪个文件。

中间带1,7的一行星号表示我们正在查看alpha1中的行。准确地说,我们看的是第1行到第7行。单词Delta被标记为已更改。它有一个感叹号(!)在它旁边,它是红色的。在该行前后显示了三行未更改的文本,因此我们可以在文件中看到该行的上下文。

中间带1,7的虚线告诉我们,我们现在看到的是来自alpha2的线。同样,我们在看第1行到第7行,第4行的单词Dave被标记为不同的。

默认值为每个更改上方和下方的三行上下文。您可以指定希望diff提供多少行上下文。为此,请使用带大写字母“C”的-C(复制上下文)选项,并提供所需的行数:

colordiff -C 2 alpha1 alpha2

如何在linux终端上比较两个文本文件

提供上下文的第二个diff选项是-u(统一上下文)选项。

colordiff -u alpha1 alpha2

如何在linux终端上比较两个文本文件

和前面一样,我们在输出上有一个标题。将命名这两个文件,并显示它们的修改时间。字母1的名称前有破折号(-),字母2的名称前有加号(+)。这告诉我们破折号将用来表示alpha1,加号将用来表示alpha2。列表中分散着以at符号(@)开头的行。这些线标志着每个差异的开始。它们还告诉我们每个文件中显示了哪些行。

我们将在标记为不同的行之前和之后显示三行,以便我们可以看到更改行的上下文。在统一视图中,具有差异的线被一个一个地显示出来。alpha1的行前面有一个破折号,alpha2的行前面有一个加号。这个显示在8行中实现了上面复制的上下文显示需要15行才能完成的任务。

正如您所期望的,我们可以要求diff提供我们希望看到的统一上下文的确切行数。为此,请使用带大写“U”的-U(统一上下文)选项,并提供所需的行数:

colordiff -U 2 alpha1 alpha2

如何在linux终端上比较两个文本文件

忽略空格和大小写

让我们分析另外两个文件,test4和test5。上面有六个超级英雄的名字。

colordiff -y -W 70 test4 test5

如何在linux终端上比较两个文本文件

结果表明,diff与黑寡妇、蜘蛛侠和雷神系没有差异。它确实标志着美国队长,铁人和绿巨人的变化。

有什么不同?好吧,在test5中,Hulk是用小写字母“h”拼写的,美国队长在“船长”和“美国”之间有一个额外的空格?没有明显的区别。这里有一个很好的经验法则。如果你看不见,答案是空白。几乎可以肯定的是,在那一行的末尾有一两个空格,或者一个制表符。

如果它们对您不重要,您可以指示diff忽略特定类型的线差异,包括:

  • -i:以防出现分歧。
  • -Z:忽略尾随空格。
  • -b:忽略空白量的变化。
  • -w:忽略所有空白更改。

让我们让diff再次检查这两个文件,但这次忽略任何差异。

colordiff -i -y -W 70 test4 test5

如何在linux终端上比较两个文本文件

带有“The Hulk”和“The Hulk”的行现在被认为是匹配的,小写的“h”没有任何区别。

colordiff -i -Z -y -W 70 test4 test5

如何在linux终端上比较两个文本文件

正如所怀疑的,后面的空白一定是铁人行上的差异,因为diff不再标记该行的差异。就剩下美国队长了。让我们让diff忽略case,忽略所有空格问题。

colordiff -i -w -y -W 70 test4 test5

如何在linux终端上比较两个文本文件

通过告诉diff忽略我们不关心的差异,diff告诉我们,出于我们的目的,文件匹配。

diff命令有更多的选项,但大多数选项与生成机器可读的输出有关。这些可以在Linux手册页上查看。我们在上述示例中使用的选项将使您能够使用命令行和人眼追踪文本文件版本之间的所有差异。

  • 发表于 2021-04-03 16:32
  • 阅读 ( 168 )
  • 分类:互联网

你可能感兴趣的文章

linux终端的5个联网命令

... 对于同时运行多个命令,请看一下如何在带屏幕的Linux终端上执行多任务。 ...

  • 发布于 2021-03-13 15:30
  • 阅读 ( 221 )

40多个最常用的linux终端命令

... 在您真正充分利用终端之前,您需要知道如何导航它。这就是为什么我们认为这些是最基本的Linux命令:如果你不能更改目录或者在一个你不记得如何使用的命令上获得帮助,那么再多的终端知识也帮不了你。 ...

  • 发布于 2021-03-15 21:40
  • 阅读 ( 259 )

linux下如何重命名文件

要在Linux中重命名文件吗?如果您知道如何在Windows、macOS或Chrome操作系统中完成这项工作,那么您就知道如何在这里完成这项工作。在大多数版本的Linux上,您只需右键单击一个文件并选择Rename选项。 ...

  • 发布于 2021-03-22 02:48
  • 阅读 ( 275 )

启动linux的9个基本命令

... 如何在linux下打开终端 ...

  • 发布于 2021-03-26 18:33
  • 阅读 ( 226 )

如何在linux中创建新文件

Linux中有几种不同的应用程序和命令可以为您创建新文件,即使不启动应用程序。使用哪种方法取决于文件的用途。让我们看看这些选项,这样您就可以知道哪一个对您最有用。 ...

  • 发布于 2021-03-28 22:06
  • 阅读 ( 245 )

如何在linux上以彩色显示手册页

...出显示的文本。 向下滚动,您将看到页面的不同元素是如何着色的。 多用与少用非常相似,但也有一些不同。在most中按H可查看键绑定及其函数的列表。 用更少的颜色 如果你不想安装另一个寻呼机或必须学习新的按键,有一...

  • 发布于 2021-04-01 20:53
  • 阅读 ( 157 )

如何在linux上使用echo命令

...以创建文本文件和日志文件。按照这个简单的指南来了解如何。 回声重复你让它重复的东西 宙斯喜欢离开奥林匹斯山,与美丽的仙女交往。在一次旅行中,他告诉一个叫埃科的山里仙女,如果他的妻子赫拉跟着他,他就要拦...

  • 发布于 2021-04-03 00:31
  • 阅读 ( 181 )

如何在linux上使用管道

使用Linux管道编排命令行实用程序如何协作。通过利用一组独立命令并将它们转化为一个专注的团队,简化复杂的流程并提高生产率。我们教你怎么做。 到处都是管道 管道是Linux和类Unix操作系统最有用的命令行特性之一。管道...

  • 发布于 2021-04-03 04:49
  • 阅读 ( 198 )

linux上的stdin、stdout和stderr是什么?

...出定向到/dev/null。 检测脚本中的重定向 我们讨论了命令如何检测是否有任何流被重定向,以及如何选择相应地改变其行为。我们能用自己的脚本来完成吗?是的,我们可以。这是一个很容易理解和运用的技巧。 在编辑器中键入...

  • 发布于 2021-04-03 06:21
  • 阅读 ( 239 )

如何在linux上使用strings命令

...与其他命令一起工作时,它就真正地出现了。当您看到它如何位于二进制文件和其他工具(如grep)之间时,您就开始了解这个稍微晦涩难懂的命令的功能了。

  • 发布于 2021-04-03 09:27
  • 阅读 ( 268 )
qiang2663905
qiang2663905

0 篇文章

相关推荐