本文介绍在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
输出如下:
*** 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...
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
输出如下:
*** 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
统一格式
统一输出格式是上下文格式的改进版本,并产生较小的输出。
使用-u选项使diff以统一格式打印输出:
diff -u 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
-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
输出如下:
--- 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命令查看。
TAG:
除非注明,文章均由 Linux系统学习 整理发布,欢迎转载。如有版权争议,请联系删除。
文章评论
留言与评论(共有 0 条评论)
验证码: