diff是一个命令行实用程序,使您可以逐行比较两个文件。它还可以比较目录的内容。

该diff命令最常用于创建一个补丁,其中包含可以使用该patch命令应用的一个或多个文件之间的差异。

如何使用diff命令

该diff命令的语法如下:

diff [OPTION]... FILES

该diff命令可以以几种格式显示输出,其中最常用的是普通,上下文和统一格式。输出包含有关文件中哪些行必须更改以使它们变得相同的信息。如果文件匹配,则不产生任何输出。

要将命令输出保存到文件,请使用重定向运算符:

diff file1 file2 > patch

在本文中,我们将使用以下两个文件来解释diff命令的工作方式:

文件1

Ubuntu

Arch Linux

Debian

CentOS

Fedora

文件2

Kubuntu

Ubuntu

Debian

Arch Linux

Centos

Fedora

普通格式

以最简单的形式,当diff命令在两个文本文件上运行且没有任何选项时,它将以正常格式生成输出:

diff file1 file2

输出将如下所示:

0a1

> Kubuntu

2d2

< Arch Linux

4c4,5

< CentOS

---

> Arch Linux

> Centos

普通输出格式由一个或多个描述差异的部分组成。每个部分如下所示:

change-command

< from-file-line...

---

> to-file-line...

0a1,2d2和4c4,5是变化的命令。每个更改命令从左到右包含以下内容:

第一个文件中的行号或行范围。

一个特殊的更改字符。

第二个文件中的行号或行范围。

更改字符可以是以下之一:

a -添加行。

c -换行。

d -删除行。

更改命令后跟被删除()的完整行。

让我们解释一下输出:

0a1- 在file1的开头(第二行之后)添加第二个文件的行。

> Kubuntu -如上所述,将第二行中的行添加到第一个文件中。

2d2-删除2第一个文件中的行。在2后d符号表示,如果该行不删除,将上线出现2在第二个文件。

< Arch Linux -删除的行。

4c4,5-用第二个文件中的行替换(更改)5第一个文件中的行4-5。

< CentOS -第一个文件中要替换的行。

--- - 分隔器。

> Arch Linux和> Centos-从所述第二文件中的行替换行中的第一个文件。

上下文格式

使用上下文输出格式时,该diff命令会在文件之间不同的行周围显示几行上下文。

该-c选项指示diff以上下文格式产生输出:

diff -c file1 file2

输出:

*** file12019-11-25 21:00:26.422426523 +0100

--- file22019-11-25 21:00:36.342231668 +0100

***************

*** 1,6 ****

Ubuntu

- Arch Linux

Debian

! CentOS

Fedora

--- 1,7 ----

+ Kubuntu

Ubuntu

Debian

! Arch Linux

! Centos

Fedora

如果比较了文件,则输出以名称和时间戳开始,以及一个或多个描述差异的部分开始。每个部分如下所示:

***************

*** from-file-line-numbers ****

from-file-line...

--- to-file-line-numbers ----

to-file-line...

from-file-line-numbers和to-file-line-numbers-行号或逗号分隔范围在第一和第二文件,分别线。

from-file-line和to-file-line-不同的线和上下文的线:

以两个空格开头的行是上下文行,这两个文件中的行相同。

以减号(-)开头的行是第二个文件中不包含任何内容的行。第二个文件中缺少行。

以加号(+)开头的行是对应于第一个文件中没有内容的行。第一个文件中缺少行。

以感叹号(!)开头的行是在两个文件之间更改的行。!从第一个文件开始的每一行行在第二个文件中都有对应的匹配项。

让我们解释输出中最重要的部分

在此示例中,我们只有一节描述了差异。

*** 1,6 ****并--- 1,7 ----告诉我们本节中包含的第一个文件和第二个文件中的行范围。

行Ubuntu,Debian,Fedora,最后的空行是在这两个文件是相同的。这些行以双倍空格开头。

行- Arch Linux从第一个文件对应于没有在第二个文件。尽管第二行中也存在此行,但是位置不同。

行+ Kubuntu第二个文件对应于没有在第一个文件。

行! CentOS从第一个文件,线! Arch Linux和! CentOS从第二个文件中的文件之间变化。

默认情况下,上下文行的数量默认为三。要指定另一个数字,请使用-C(--contexts)选项:

diff -C 1 file1 file2

输出:

*** file12019-11-25 21:00:26.422426523 +0100

--- file22019-11-25 21:00:36.342231668 +0100

***************

*** 1,5 ****

Ubuntu

- Arch Linux

Debian

! CentOS

Fedora

--- 1,6 ----

+ Kubuntu

Ubuntu

Debian

! Arch Linux

! Centos

Fedora

输出以文件的名称和时间戳以及描述差异的一个或多个部分开始。每个部分采用以下形式:

***************

@@ from-file-line-numbers to-file-line-numbers @@

line-from-files...

@@ from-file-line-numbers to-file-line-numbers @@ -本节中包含的第一个和第二个文件的行号或行范围。

line-from-files -不同的线和上下文的线:

以两个空格开头的行是上下文行,这两个文件中的行相同。

以减号(-)开头的行是从第一个文件中删除的行。

以加号(+)开头的行是从第一个文件添加的行。

忽略大小写

您可能在上面的示例中注意到,该diff命令默认情况下区分大小写。

使用-i选项告诉diff忽略大小写:

diff -ui file1 file2

输出:

--- file12019-11-25 21:00:26.422426523 +0100

+++ file22019-11-25 21:00:36.342231668 +0100

@@ -1,6 +1,7 @@

+Kubuntu

Ubuntu

-Arch Linux

Debian

+Arch Linux

CentOS

Fedora

写在最后

比较文本文件之间的差异是Linux系统管理员最常见的任务之一。

该diff命令可以逐行比较文件。有关更多信息,请使在您的终端中键入man diff命令来显示diff更多详细的用法。

如有任何疑问,请在下面发表评论。

Logo

更多推荐