如何在Linux中使用diff命令逐行比较文件

如果您是Linux用户,并且您的工作涉及到各种Linux发行版的工作,您可能会发现自己在没有GUI的Linux系统上键入命令。 这意味着您将无法再访问您最喜爱的GUI应用程序 - 例如,Gedit进行文件编辑 - 通常用于您的常规工作。

无论您是系统管理员还是开发人员,文件比较是几乎所有人的工作通用的任务。 如果在仅使用CLI的Linux系统上工作时需要比较两个文件怎么办? 您最喜欢的基于GUI的比较工具显然不会在您的处置。 不用说,你必须用命令行实用工具来完成你的工作。

在Linux中,diff命令可用于比较两个文件,但事实是这个实用程序涉及到一个轻微的学习曲线。 如果您不知道差异是如何工作的,并且正在寻找快速入门教程,请继续阅读,如本文所述,我们将讨论此命令的基础知识以及一些易于理解的示例。

在我们继续之前,请记住,本教程中的所有示例都已在Ubuntu 14.04中使用Bash版本4.3.11(1)和差异版本3.3进行了测试。

 

Linux差异命令

而不是直接跳到示例,首先要知道一下这个命令是很好的。 diff命令的手册页显示该工具逐行比较文件。 其语法是:

diff [OPTION]... FILES

虽然[OPTION]表示工具提供的各种命令行选项,但文件通常是一些文件名。 尽管差异手册页包含有关该命令的有用信息,但是diff的完整文档仍保留为Texinfo手册。 如果信息差异程序正确安装在您的站点上,则该命令

info diff

应该给你访问完整的手册。

差异使用/示例

现在让我们讨论如何使用差异。 为此,让我们从一个基本的例子开始。 假设以下是我们要比较的两个文件:

文件1:

test
test2
test3

file2:

test
test23
test3

以下是使用diff命令比较这两个文件的方法:

diff file1 file2

这是以上命令产生的输出:

2c2
< test2
---
> test23

输出似乎很神秘,对吧? 我们稍后会来。 我们首先了解diff产生的输出的基本结构。

要记住的第一件事是,输出表示将file1(通常是原始文件)转换为file2(新的或更改的文件)所需的更改。 输出通常由以数字(或范围)开始,后跟字母表(a,d或c)和另一个数字(或范围)的行组成。 例如2c2 (从上面的输出)。

第一个数字表示来自file1(原始文件)的行(或行范围),最后一个数字表示来自file2(新文件)的行(或行范围)。 对于之间的字母表, 添加 一个 表示 d 表示 删除, c 表示 更改

所以,2c2意味着原始文件中的第二行已经更改,需要从新文件替换为第二行,以使文件相同。 如果您手动比较两个文件(file1和file2),那么您将看到这样。

对于上述示例中的2c2之后的三行,以“<”开始的仅仅是file1的第二行,而以'>'开头的那一行只不过是文件2中有问题的行。它们之间的三个连字符(---)仅用于分离目的。

是否有需要重新访问第一个例子的输出? 很可能不是上面的解释应该使其自我解释。 现在我们再来一个例子。

所以,这里是file1:

Hi all,
This is a diff command tutorial
from youcl.
Hope you'll benefit from it.
Thanks.

这是file2:

Hi all,
Welcome to youcl.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.

这是命令(它保持不变):

diff file1 file2

这里的输出:

2,4c2,4
< This is a diff command tutorial
< from youcl.
< Hope you'll benefit from it.
---
> Welcome to youcl.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.

所以你可以看到,在这种情况下,主输出 - 2,4c2,4 - 由字母表之前和之后的多个数字组成。 这些基本上是范围 - 2,4表示行号2,3和4.所以输出意味着原始文件(file1)中的行号2到4已经改变,需要由行号2到4替换为file2以使文件相同。

继续,让我们改变文件的内容。 当file1保持不变时,file2现在变成:

Welcome to youcl.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.

This is a diff command tutorial
from youcl.
Hope you'll benefit from it.
Thanks.

现在,如果运行diff命令,将产生以下输出:

0a1,5
> Welcome to youcl.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>

所以你可以看到该工具立即认识到file2中的第二个段落只不过是所有file1所包含的内容。 所以输出表示从file2的第1行到第5行应该被附加在file1的开头,使这两个文件相同。

如果你从file2删除最后一行(“谢谢”),这里是输出:

0a1,5
> Welcome to youcl.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>
4d8
< Thanks.

您可以看到输出现在还包含4d8,这意味着file1中的第四行应该被删除,以便使两个文件同步从行号8开始。当然,这是在你解决了0a1,5的更改之后首先提到。

结论

同意,diff命令的输出不容易理解,但学习曲线不是那么陡。 用工具花费几个小时,你一定会很舒服。 至于本教程,我们刚刚在这里划伤了表面。 看看命令的手册页,你会意识到有更多的了解diff,我们将在本教程下一部分中做些什么。

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

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

支付宝扫一扫打赏

微信扫一扫打赏