linux 终端和文档的区别,如何在Linux终端中比较两个文本文件 | MOS86

差异alpha1 alpha2

我们如何剖析该输出? 一旦您知道要查找的内容,它就没那么糟了。 每个差异都在单列中依次列出,并标记每个差异。 标签包含字母两侧的数字,例如4c4。 第一个数字是alpha1中的行号,第二个数字是alpha2中的行号。中间的字母可以是:

在我们的示例中,4c4告诉我们必须更改alpha1的第四行以匹配alpha2的第四行。 这是diff找到的两个文件之间的第一个区别。

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

下一个更改由12c12指示。 应用相同的逻辑,这告诉我们alpha1中的第12行包含单词Lima,而alpha2中的第12行包含单词Linux。

第三个更改是指已从alpha2中删除的行。 解密了标签21d20,因为需要从第一个文件中删除第21行,以使两个文件从第20行开始进行同步。

第四个差异标记为26a26,28。 此更改是指已添加到alpha2的三行额外内容。 注意标签中的26,28。 用逗号分隔的两行数字表示一系列行号。 在此示例中,范围是从第26行到第28行。标签被解释为在第一个文件中的第26行,在第二个文件中添加了第26至28行。 我们显示了alpha2中需要添加到alpha1中的三行。 这些包含单词Quirk,Strange和Charm。

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

差异-s alpha1 alpha3

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

差异-q alpha1 alpha2

要注意的一件事是,对于两个相同的文件,-q(简短)选项完全消失,根本不报告任何内容。

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

差异-y -W 70 alpha1 alpha2

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

如果您希望文件差异的摘要更为紧凑,请使用--suppress-common-lines选项。 这将迫使diff仅列出更改,添加或删除的行。

如果您希望文件差异的摘要更为紧凑,请使用--suppress-common-lines选项。 这将迫使diff仅列出更改,添加或删除的行。

另一个名为colordiff的实用程序将颜色突出显示添加到diff输出中。 这样可以更轻松地查看哪些行具有差异。

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

sudo apt-get install colordiff使用colordiff就像使用diff一样。

实际上,colordiff是diff的包装器,而diff负责幕后的所有工作。 因此,所有diff选项都可以与colordiff一起使用。

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

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

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

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

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

中间带有1,7的虚线表示我们正在查看的是alpha2中的线。 再次,他们在看第一到第七行,第四行上的戴夫这个词被标记为不同。

每次更改上方和下方的三行上下文是默认值。 您可以指定要差异提供多少行上下文。 为此,请使用-C(复制的上下文)选项并使用大写字母C,并提供所需的行数:

每次更改上方和下方的三行上下文是默认值。 您可以指定要差异提供多少行上下文。 为此,请使用-C(复制的上下文)选项并使用大写字母C,并提供所需的行数:

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

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

和以前一样,我们在输出上有一个标头。 命名这两个文件,并显示其修改时间。 alpha1名称前有破折号(-),alpha2名称前有加号(+)。 这告诉我们,破折号将用于指代alpha1,加号将用于指代alpha2。 整个列表中散布着以符号(@)开头的行。 这些行标志着每个差异的开始。 他们还告诉我们每个文件中正在显示哪些行。

将显示标记为不同的一行之前和之后的三行,以便我们可以看到更改后的行的上下文。 在统一视图中,具有差异的线一个显示在另一个之上。 alpha1的行之前是破折号,而alpha2的行之前是加号。 该显示以八行显示,完成了上面复制的上下文显示的十五步操作。

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

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

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

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

结果表明,diff与“黑寡妇”,“蜘蛛侠”和“雷神”系列没有区别。 它确实标记了美国队长,钢铁侠和绿巨人的阵容。

那有什么不同呢? 好吧,在test5中,绿巨人的拼写是小写的h,而美国队长在美国队长和美国队长之间有一个额外的空格。 好的,这很明显,但是Ironman系列有什么问题? 没有明显的差异。 这是一个好的经验法则。 如果看不到,答案是空格。 在该行的末尾几乎可以肯定有一个或两个杂散空间或一个制表符。

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

让diff再次检查这两个文件,但是这次忽略大小写的任何差异。

让diff再次检查这两个文件,但是这次忽略大小写的任何差异。

“绿巨人”和“绿巨人”所在的行现在被视为匹配项,并且小写h标记为无差异。 让diff也忽略尾随空格。

“绿巨人”和“绿巨人”所在的行现在被视为匹配项,并且小写h标记为无差异。 让diff也忽略尾随空格。

如所怀疑的那样,尾随空白一定是Ironman行上的差异,因为diff不再标记该行的差异。 剩下美国队长。 让diff忽略大小写并忽略所有空白问题。

如所怀疑的那样,尾随空白一定是Ironman行上的差异,因为diff不再标记该行的差异。 剩下美国队长。 让diff忽略大小写并忽略所有空白问题。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值