差异
像 COMM 程序 差异 用于检测文件之间的差异。 然而, 差异 是一个更复杂的工具,支持多种输出格式,并且能够同时处理大量文本文件。 差异 软件开发人员经常使用它来检查程序源代码不同版本之间的变化,因此具有递归检查源代码目录的能力,通常称为 源树. 一种常见用途 差异 是创造 差异文件 or 补丁 被程序使用,例如 补丁 (我们将很快讨论)将一个文件(或多个文件)的一个版本转换为另一个版本。
如果我们使用 差异 查看我们之前的示例文件:
[我@linuxbox ~]$ 差异文件1.txt 文件2.txt
1d0
< 4a4
> 和
[我@linuxbox ~]$ 差异文件1.txt 文件2.txt
1d0
< 4a4
> 和
我们看到它的默认输出样式:两个文件之间差异的简洁描述。 在默认格式中,每组更改前面都有一个 更改命令 的形式 范围操作范围 描述将第一个文件转换为第二个文件所需的更改位置和类型:
表 20-4:diff 更改命令
更改说明
更改说明
r1ar2 在位置追加行 r2 在第二个文件中的位置
r1 在第一个文件中。
r1cr2 更改(替换)位置处的行 r1 与该位置的线条 r2 在第二个文件中。
r1dr2 删除第一个文件中位置的行 r1,这将出现在范围 r2 在第二个文件中
在这种格式中,范围是起始行和结束行的逗号分隔列表。 虽然这种格式是默认的(主要是为了符合 POSIX 和向后兼容传统的 Unix 版本的 差异),它不像其他可选格式那样被广泛使用。 两种比较流行的格式是 上下文格式 和 统一格式.
当使用上下文格式查看时( -c 选项),我们将看到:
[我@linuxbox ~]$ diff -c 文件1.txt 文件2.txt
*** 文件1.txt 2008-12-23 06:40:13.000000000 -0500
--- 文件2.txt 2008-12-23 06:40:34.000000000 -0500
***************
*** 1,4 ***
- A B C D
-1,4 ----
bcd
+和
[我@linuxbox ~]$ diff -c 文件1.txt 文件2.txt
*** 文件1.txt 2008-12-23 06:40:13.000000000 -0500
--- 文件2.txt 2008-12-23 06:40:34.000000000 -0500
***************
*** 1,4 ***
- A B C D
-1,4 ----
bcd
+和
输出以两个文件的名称及其时间戳开头。 第一个文件用星号标记,第二个文件用破折号标记。 在列表的其余部分,这些标记将表示它们各自的文件。 接下来,我们会看到更改组,包括周围上下文行的默认数量。 在第一组中,我们看到:
1,4年***
它表示第一个文件中的第 1 行到第 4 行。 后来我们看到:
--- 1,4 ---
这表示第二个文件中的第 1 行到第 4 行。 在更改组中,行以四个指标之一开始:
表 20-5:diff 上下文格式更改指示符
指示灯含义
指示灯含义
空白 为上下文显示的行。 它并不表示两个文件之间的差异。
- 删除了一行。 此行将出现在第一个文件中,但不会出现在第二个文件中。
+ 添加了一行。 此行将出现在第二个文件中,但不会出现在第一个文件中。
! 换了一条线。 将显示该行的两个版本,每个版本都在更改组的相应部分中。
统一格式类似于上下文格式,但更简洁。 它指定为 -u 选项:
[我@linuxbox ~]$ diff -u 文件1.txt 文件2.txt
--- 文件1.txt 2008-12-23 06:40:13.000000000 -0500
+++ file2.txt 2008-12-23 06:40:34.000000000 -0500
@@ -1,4 + 1,4 @@
-A B C D
+e
[我@linuxbox ~]$ diff -u 文件1.txt 文件2.txt
--- 文件1.txt 2008-12-23 06:40:13.000000000 -0500
+++ file2.txt 2008-12-23 06:40:34.000000000 -0500
@@ -1,4 + 1,4 @@
-A B C D
+e
上下文和统一格式之间最显着的区别是消除了上下文的重复行,使得统一格式的结果比上下文格式的结果更短。 在我们上面的例子中,我们看到文件时间戳类似于上下文格式的时间戳,后跟字符串 @@ -1,4 + 1,4 @@. 这表示更改组中描述的第一个文件中的行和第二个文件中的行。 接下来是行本身,默认为三行上下文。 每行以三个可能的字符之一开始:
表 20-6:diff 统一格式更改指示符
字符含义
字符含义
空白 此行由两个文件共享。
- 此行已从第一个文件中删除。
+ 此行已添加到第一个文件中。