myfreax

Linux Diff命令比较文件不同

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

3 min read
By myfreax
Linux Diff命令比较文件不同
Linux Diff命令比较文件不同

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

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

diff命令的语法形式是diff [OPTION]... FILES。其中FILES可以是一个或者多个文件。OPTION是diff命令的选项。

diff命令可以以几种格式显示输出,其中最常见的是普通格式,上下文格式和统一格式。

输出包含文件相同与不相同的信息。如果文件匹配,则不会产生输出。要将命令输出保存到文件,请使用重定向运算符>

在本教程中,我们将使用file1file2两个文件来说明diff命令的工作方式。

diff file1 file2 > patch
Ubuntu
Arch Linux
Debian
CentOS
Fedora
file1
Kubuntu
Ubuntu
Debian
Arch Linux
Centos
Fedora
file2

标准格式

在没有任何选项是运行diff命令最简单的形式,在这种情况下diff命令比较两个文本文件,它会以标准格式生成输出。

标准格式输出由描述差异的一个或多个部分组成。与0a12d24c4,5类似的字符称为更改命令。

每个更改命令从左到右包含这些内容,第一个文件中的行号或行范围。更改字符。第二个文件中的行号或行范围。

更改字符可以是,a添加的行。c换行。d删除行。更改命令后跟已删除的完整行<,添加到文件中完整行符号是>

change-command
< from-file-line...
---
> to-file-line...
diff file1 file2
0a1
> Kubuntu
2d2
< Arch Linux
4c4,5
< CentOS
---
> Arch Linux
> Centos

让我们解释一下输出。0a1在file1的开头添加第二个文件的第一行。> Kubuntu表示添加Kubuntu到第一个文件的第一行。

2d2在第一个文件删除第二行2d符号后的2 表示在第二个文件没有被删除。< Arch Linux 表示被删除的行。

4c4,5使用第二个文件中的4-5行替换第一个文件中的第5行。

< CentOS 该行在第一个文件中被替换。---分隔符。第二个文件的行> Centos替换第一个文件> Arch Linux行。

忽略区分大小写

在上述示例中您可能会注意到,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命令逐行比较文件。如有任何疑问,请在下面发表评论。