如何在 Linux 中比较两个文件
如果您想比较两个文件并找出差异,请使用名为“diff”的命令。本指南的重点是为您提供“diff”命令的用法以及各种选项来获取两个文件之间的差异。
那么,“diff”命令实际上是如何工作的呢? “diff”命令比较两个文件并输出两个文件之间的差异列表。更准确地说,它生成需要在第一个文件中进行的修改列表以匹配第二个文件。程序员还可以使用“diff”命令来获取两个源代码文件之间的差异以开发补丁。
在深入研究示例之前,请注意文件的顺序非常重要。因为“diff”命令根据文件的顺序给出输出。
如何在Linux中使用“diff”命令比较文件:
“diff”命令的语法如下:
首先,创建两个文件。我正在创建名为 “test_file_1.txt ” 和 “test_file_2.txt ” 的文本文件。这些文件包含的内容略有不同:
现在使用以下命令来获取差异:
标准输出根据命令中提到的文件的顺序显示匹配的行。那么,让我们解码输出:
文件的比较带有标签,每个标签两侧都有一个数字。格式如下:
[文件 1 的行号][标签(a,c,d)][文件 2 的行号]
共有三个标签:
a – 添加:在第一个文件中添加内容以与第二个文件同步。
c – 更改:表示需要修改第一个文件的内容以匹配第二个文件。
d – 删除:从第一个文件中删除内容以与第二个文件匹配。
“2d1”表示删除第一个文件的第2行,以匹配第二个文件的第1行。
类似地,“4c3”表示对第一个文件的第四行进行更改以匹配第二个文件的第 3 行,因为两行略有不同。
还有另一种查看差异的方法,使用带有“-y”选项的“diff”命令:
在上面的输出中,“test_file_1.txt”的内容显示在左侧,而“text_file_2.txt”的内容显示在右侧。差异由符号表示:
| — 第二个文件中的行不同
> — 第二个文件中附加了行
< — 行已从第二个文件中删除
“-W”表示两个文件内容之间的宽度。要单独获取并查看差异,请使用以下命令:
如何使用“diff”命令在一行中获取输出:
如果标记的方法对您来说很难解码,那么还有一种更简单的方法。将“-q”选项与“diff”命令一起使用可以在一行中输出。好吧,尽管没有任何附加信息:
如果文件不同,则上述命令将给出输出。如果文件相同,则不会有输出。为了演示它,我使用以下命令创建 “test_file_1.txt ” 的副本:
将创建一个名为 “test_file_3.txt ” 的新文件,其中包含与 “test_file_1.txt ” 相同的内容。现在,使用:
由于两个文件具有相似的内容,因此不会有输出。
如何使用“diff”命令在上下文模式下检查文件的差异:
要在上下文模式下进行比较,“-c”选项将与“diff”命令一起使用:
让我们剖析一下输出。
为了保持差异,第一个文件用“***”以及创建日期和时间表示,而第二个文件用“—”表示。
下一行表示比较期间考虑的行范围。对于第一个文件,它是 “***1,6**** ”,对于第二个文件,它是 “—1,5—- ”:
差异由符号表示:
+ :第一个文件中不存在该行。将其插入第一个文件或从第二个文件中删除以匹配两个文件。
– :该行存在于第一个文件中,但不存在于第二个文件中。尝试将其插入第二个文件或将其从第一个文件中删除以匹配两个文件。
! :线路需要修改才能匹配。
如何使用“diff”命令在统一模式下检查文件的差异:
统一模式与上下文模式非常相似,但没有冗余信息。我们使用的标志是“-u”:
在输出中,第一个文件用“—”表示,第二个文件用“+++”表示。第二行显示两个文件中考虑进行比较的行数,然后是要删除、添加或修改的内容及其符号。两个文件中不会有具有相似行的符号。
如何在使用“diff”命令时忽略大小写:
如果您想在忽略区分大小写的情况下比较文件,请使用 “-i ” 标志:
为了演示,我把第一个文件中“Deepin”的“D”变小了:
从第一个命令可以看出,差异已被指出;当使用“-i”时,差异已被删除。
下面列出了“diff”命令的一些其他有用选项:
- -B
它忽略行全部空白的修改
- -E
该选项忽略选项卡扩展
- -I
它忽略所有行匹配的更改
- -s
当两个文件相同时给出输出
- -w
它忽略所有空白
- -Z
它忽略行尾的空白
如何使用 Vim 编辑器比较两个文件:
比较两个文件的另一种方法是使用 “vimdiff ” 命令。为此,你需要安装 vim:
现在,要比较两个文件,请使用:
两个文件将并排打开。不匹配的部分将突出显示:
如何使用“colordiff”比较两个文件:
另一种方法是“diff”命令的某种扩展。您可以通过添加颜色来使比较更容易识别。要安装使用:
要比较文件,请使用:
您可以将“diff”替换为“colordiff”,以获得彩色格式的“diff”命令的标准输出。
结论:
为了比较 Linux 甚至 macOS 中的文件,使用的实用程序称为“diff”。 “diff”实用程序比较两个文件并提供有关两个文件之间差异的信息。开发人员主要使用“diff”命令来创建补丁文件。