23

Linux下diff命令用法详解

 3 years ago
source link: http://www.cnblogs.com/yychuyu/p/13269347.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

大家好,我是良许。

我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点。在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也有很多很强大的工具,良许之前也写过一篇文章介绍:

Linux下9种优秀的代码比对工具推荐

这些比对工具其实都是基于 diff 命令,下面就详细介绍一些 diff 命令的用法。

diff命令是一个分析文件信息的命令,可以打印出文件之间的差异。它可以逐行地比较两个文件的内容,也可以递归地比较文件夹的内容。 diff 命令的输出内容可以让我们知道要使两个文件相同需要做哪些修改,这对于我们的工作很有帮助。

在开始前,我们先用文件编辑器创建两个内容相同的文件。这里我们使用的是 nano

$ nano diffsample1

输入内容:

发布

优质的

技术文章

yyI3aaY.png!web

使用 Ctrl + XY 保存并退出。

创建第二个文件:

$ nano diffsample2

输入同样的内容并保存退出。

需要注意的是,空格和 Tab 对两个文件是否完全相同会有影响。

使用 diff 命令查看两个文件是否有差异:

$ diff diffsample1 diffsample2

这时 diff 命令没有输出任何信息,说明这两个文件的内容是完全相同的。

现在我们对 diffsample2 做一些修改,将 文章 改为 帖子 然后保存并退出

6NNv6jr.png!web

再使用 diff 命令:

$ diff diffsample1 diffsample2

查看输出的信息:

63ue2yQ.png!web

在以上输出信息中, 3c3 表示第一个文件的第三行需要被替换为第二个文件的第三行,然后为我们提示出了需要修改的内容: 技术文章技术帖子

diff命令所参考的不是第一个文件,而是第二个文件,它的输出信息有以下几种字符:

c: 表示必须做一些修改

a: 表示必须添加一些内容

d: 表示必须删除一些内容

字符前的数字表示第一个文件中的行数,字符后的内容表示第二个文件中的行数。

<表示引用的第一个文件中的内容,而 > 表示引用的第一个文件中的内容

现在让我们交换两个文件的顺序再试试:

$ diff diffsample2 diffsample1

bAryyuA.png!web

在交换文件顺序之后 diff 参考的文件变成了 diffsample1,提示我们将 技术帖子 修改为 技术文章

现在我们将 diffsample1 编辑为以下内容:

6zAFNf2.png!web

删除了第二行和第三行,再试试使用 diff 命令

$ diff diffsample2 diffsample1

yyIjU3Y.png!web

现在我们可以看到,因为我们以 diffsample1 作为参考,为了使两个文件相同,我们需要删除 diffsample2 中的第二行和第三行,然后就会和 diffsample1 中的第一行内容相同。

我们再试试交换 diffsample1 和 diffsample2 的顺序:

$ diff diffsample1 diffsample2

MvIRJrE.png!web

可以看到,现在 diff 给我们的提示信息变为了在 diffsample1 中的第一行后面添加 diffsample2 中的第二行和第三行内容。

现在让我们来测试区分内容的大小写:

编辑 diffsample1 的内容为:

NJj6Nvn.png!web

编辑 diffsample1 的内容为:

qMRZVvV.png!web

两个文件中唯一的区别是第三行的大小写,再试试 diff 命令

$ diff diffsample1 diffsample2

MRv2myq.png!web

可以看到 diff 命令找出了大小写的不同,如果我们不想检查大小写,可以使用 -i 选项。

$ diff -i diffsample1 diffsample2

这时内容没有区别, diff 没有输出任何信息。

我们可以使用 -u 选项以统一的格式输出信息:

BZvuiyA.png!web

输出信息中使用 -+ 表示哪些内容需要被删除或者添加来使得文件内容相同。

之前提到过 diff 命令会检查空格或tab,如果我们想要忽略空格和tab,可以使用 -w 选项。

在 diffsample2 的第二行 good 后面输入一些空格和tab,并把之前的大写改回小写。

6Vzqmqa.png!web

再使用 diff 命令

$ diff diffsample1 diffsample2

JBbA3yb.png!web

可以看到找出了不同,再使用 -w 忽略空格和tab,这时便没有任何输出信息了。

diff命令还有许多选项,可以用来忽略某些情况或者更改输出等,我们可以使用 man 命令来获取更多的相关信息。

公众号:良许Linux

q2Ijume.jpg!web

有收获?希望老铁们来个三连击,给更多的人看到这篇文章


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK