Linux中的Diff命令

linux

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...

0a12d24c4,5是更改命令。每个更改命令从左到右包含以下内容:

  • 第一个文件中的行号或行范围。
  • 特殊更改字符。
  • 第二个文件中的行号或行范围。

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

  • a-添加行。
  • c -换线。
  • d -删除行。

更改命令后跟已删除的完整行(<),并将其添加到文件中的完整行(>)。

让我们解释一下输出:

  • 0a1-在文件1的开头(在0行之后)添加第二个文件的1行。
  • > Kubuntu -如上所述,第二行中的行已添加到第一个文件中。
  • 2d2 -删除第一个文件中的2行。 d符号后的2表示如果未删除该行,它将出现在第二个文件的第2行上。
  • < Arch Linux -删除的行。
  • 4c4,5 -用第二个文件中的第4-5行替换(更改)第一个文件中的第5行。
  • < CentOS -第一个文件中要替换的行。
  • --- -分隔符。
  • > Arch Linux> Centos-第二个文件中的行替换了第一个文件中的行。

上下文格式

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

-c选项告诉diff以上下文格式产生输出:

diff -c file1 file2

*** file1	2019-11-25 21:00:26.422426523 +0100

--- file2 2019-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-numbersto-file-line-numbers-第一和第二个文件中的行号或逗号分隔的范围。
  • from-file-lineto-file-line-不同的行和上下文的行:
  • 以两个空格开头的行是上下文的行,这两个文件中的行都是相同的。
  • 以以下开头的行减号(-)是第二个文件中不包含任何内容的行。第二个文件中缺少行。
  • 以加号(+)开头的行是第一个文件中不包含任何内容的行。第一个文件中缺少行。
  • ​​以感叹号(!)开头的行是在两个文件之间更改的行。第一个文件中以!开头的每行行在第二个文件中具有相应的匹配项。

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

  • 在此示例中,我们只有一节描述差异。
  • *** 1,6 ****--- 1,7 ------- 1,7 ----告诉我们本节中包含的第一文件和第二文件的行范围。
  • UbuntuDebianFedora和最后一个空行是在两个文件中都相同。这些行以双倍空格开头。
  • 第一个文件中的行- Arch Linux与第二个文件中的任何内容都不对应。尽管第二行中也存在此行,但是位置不同。第二个文件中的
  • + Kubuntu对应于第一个文件中的任何内容。
  • 第一个文件中的行! CentOS文件和第二个文件的第! Arch Linux! CentOS行在两个文件之间更改。

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

diff -C 1 file1 file2

*** file1	2019-11-25 21:00:26.422426523 +0100

--- file2 2019-11-25 21:00:36.342231668 +0100

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

*** 1,5 ****

Ubuntu

- Arch Linux

Debian

! CentOS

Fedora

--- 1,6 ----

+ Kubuntu

Ubuntu

Debian

! Arch Linux

! Centos

Fedora

统一格式

统一输出格式是上下文格式的改进版本,并产生较小的输出。

使用-u选项告诉diff以统一格式打印输出:

diff -u file1 file2

--- file1	2019-11-25 21:00:26.422426523 +0100

+++ file2 2019-11-25 21:00:36.342231668 +0100

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

+Kubuntu

Ubuntu

-Arch Linux

Debian

-CentOS

+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

--- file1	2019-11-25 21:00:26.422426523 +0100

+++ file2 2019-11-25 21:00:36.342231668 +0100

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

+Kubuntu

Ubuntu

-Arch Linux

Debian

+Arch Linux

CentOS

Fedora

结论

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

diff命令逐行比较文件。有关更多信息,请在终端中键入man diff

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

以上是 Linux中的Diff命令 的全部内容, 来源链接: utcz.com/z/507420.html

回到顶部