本文介绍在Linux操作系统中使用Diff命令的方法,同时讲解普通/上下文/统一格式及忽略大小写知识。diff是一个命令行实用程序,可让你逐行比较两个文件,它还可以比较目录的内容。diff命令最常用于创建一个补丁,其中包含可以使用patch命令应用的一个或多个文件之间的差异。
如何使用diff命令 diff命令的语法如下: diff [OPTION]... FILES 参考:diff命令_Linux diff命令使用详解:比较给定的两个文件的不同。 diff命令可以以几种格式显示输出,其中最常见的是普通、上下文和统一格式,输出包含有关文件中哪些行必须更改以使它们变得相同的信息,如果文件匹配,则不产生任何输出。 要将命令输出保存到文件,请使用重定向运算符: diff file1 file2 > patch 在本文中,我们将使用以下两个文件来说明diff命令的工作方式: 1、file1: Ubuntu Arch Linux Debian CentOS Fedora 2、file2: 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-删除行。 更改命令后跟已删除的完整行(<)并添加到文件(>)。 让我们解释一下输出: 1、0a1-在file1的开头(第0行之后)添加第二个文件的第1行。 > Kubuntu-如上所述,第二行中的行添加到第一个文件中。 2、2d2-删除第一个文件中的第2行,d符号后的2表示如果未删除该行,它将出现在第二个文件的第二行。 < Arch Linux-删除的行。 3、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... 1、from-file-line-numbers和to-file-line-numbers-第一个文件和第二个文件中的行号或逗号分隔的行范围。 2、from-file-line和to-file-line-不同的行和上下文的行: 以两个空格开头的行是上下文行,这两个文件中的行相同。 以减号(-)开头的行是第二个文件中不包含任何内容的行,第二个文件中缺少行。 以加号(+)开头的行是第一个文件中不包含任何内容的行,第一个文件中缺少行。 以感叹号(!)开头的行是在两个文件之间更改的行,每行以!开头来自第一个文件的文件在第二个文件中具有相应的匹配项。 让我们解释输出中最重要的部分: 1、在此示例中,我们只有一节描述了差异。 2、*** 1,6 ****和--- 1,7 ----告诉我们本节中包含的第一文件和第二文件的行范围。 3、行Ubuntu,Debian,Fedora和最后一个空行在两个文件中都相同,这些行以双倍空格开头。 4、行-第一个文件中的Arch Linux与第二个文件中的任何内容都不对应,尽管第二行中也存在此行,但是位置不同。 5、第二个文件中的Line + Kubuntu对应于第一个文件中的任何内容。 6、行! 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... 1、@@从文件行号到文件行号@@-本节中包含的第一个和第二个文件的行号或行范围。 2、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命令查看。
相关主题 |