安卓系统

Linux中的Diff命令

Linux命令行文本处理工具 [LinuxCast视频教程]

Linux命令行文本处理工具 [LinuxCast视频教程]

目录:

Anonim

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

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

如何使用 diff 命令

diff 命令的语法如下:

diff… 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 4c4, 5 是更改命令。 每个更改命令从左到右包含以下内容:

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

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

  • a-添加行。 c 更改行。 d 删除行。

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

让我们解释一下输出:

  • 0a1 在file1的开头(第 0 行之后)添加第二个文件的第 1 行。
    • > Kubuntu 如上所述,第二行中的行添加到第一个文件中。
    2d2 删除第一个文件中的第 2 行。 d 符号后的 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-numbers to-file-line-numbers numbers-第一个文件和第二个文件中的行号或逗号分隔的行范围。 from-file-line to-file-line -不同的行和上下文的行:
    • 以两个空格开头的行是上下文行,这两个文件中的行都相同。以减号( - )开头的行是第二个文件中不包含任何内容的行。 第二个文件中缺少的行。以加号( + )开头的行是与第一个文件中没有任何内容相对应的行。 第一个文件中缺少的行。以感叹号( ! )开头的行是在两个文件之间更改的行。 每行以 ! 开头 来自第一个文件的文件在第二个文件中具有相应的匹配项。

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

  • 在此示例中,我们只有一节描述了差异。 *** 1, 6 **** --- 1, 7 ---- 告诉我们本节中包含的第一个和第二个文件的行范围。行 Ubuntu Debian Fedora 和两个文件中的最后一个空行相同。 这些行以双倍空格开头。Line-第一个文件中的 - Arch Linux 与第二个文件中的任何内容都不对应。 尽管第二行中也存在此行,但位置不同。第二个文件中的Line + Kubuntu 对应于第一个文件中的任何内容 ! CentOS ! CentOS 从第一个文件开始 ! Arch Linux ! Arch Linux ! CentOS 第二个文件中的 ! 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

差异终端