我比较了 2 个文件并得到了
1c1
< 1
---
> 1
Run Code Online (Sandbox Code Playgroud)
两个文件都只包含“1”。这有什么不同?
Rin*_*ind 68
第一行:a
代表添加、d
删除和c
更改。原始文件的行号出现在这些字母之前,修改后的文件的行号出现在字母之后。
第 2 行:第 1 行<
来自文件 1,与文件 2 不同。
第三行是分隔线。
第 4 行:>
来自文件 2 的行与文件 1 不同。
(如果您看到=
这意味着两个文件中的行相同)
您的问题可能是空格或其他非人类可读的字符:这些也会引发差异。
有一些选项可以操作输出。
例子:
rinzwind@discworld:~$ 更多 1 测试 测试2 测试3 rinzwind@discworld:~$ 更多 2 测试 测试2 测试3
上下文格式:
rinzwind@discworld:~$ diff -c 1 2 *** 1 2011-08-13 17:05:40.433966684 +0200 --- 2 2011-08-13 17:11:24.369966629 +0200 *************** *** 1,3 **** 测试 !测试2 测试3 --- 1,3 ---- 测试 !测试2 测试3
一种 ”!” 表示两个文件中对应的行之间的变化。一个“+”代表增加了一行,而一个空格代表一个不变的行。补丁的开头是文件信息,包括完整路径和时间戳。在每个大块的开头是适用于文件中相应更改的行号。出现在三个星号组之间的数字范围适用于原始文件,而三个破折号组适用于新文件。大块范围指定相应文件中的开始和结束行号。
扩展 Lekensteyn 关于统一格式的评论:
rinzwind@discworld:~$ diff -u 1 2 --- 1 2011-08-13 17:05:40.433966684 +0200 +++ 2 2011-08-13 17:11:24.369966629 +0200 @@ -1,3 +1,3 @@ 测试 -test2 +测试2 测试3
格式以与上下文格式相同的两行标题开头,只是原始文件前面有“---”,新文件前面有“+++”。接下来是一个或多个包含文件中行差异的更改块。未更改的上下文行以空格字符开头,添加行以加号开头,删除行以减号开头。
一些有用的选项:
-b
忽略空白量的变化。
-w
忽略所有空白。
-B
忽略所有空行。
-y
2 列输出。
我发现od(八进制转储)在比较带有不可打印字符的文件时很方便(特别是 diff 决定是“二进制”的文件,因此只告诉你它们确实不同)。
在下面的示例中,我创建了一对可能与原始文件类似的文件,然后对原始输出进行了比较;接下来我对几个不同的“od”输出进行了比较。
$ echo 1 > 1
$ echo "1 " > 2
$ diff 1 2
1c1
< 1
- ---
> 1
Run Code Online (Sandbox Code Playgroud)
$ od -c 1 > 1.od
$ od -c 2 > 2.od
$ diff 1.od 2.od
1,2c1,2
< 0000000 1 \n
< 0000002
---
> 0000000 1 \n
> 0000003
Run Code Online (Sandbox Code Playgroud)
$ od -Ax -c -t x1 1 > 1.od
$ od -Ax -c -t x1 2 > 2.od
$ diff 1.od 2.od
1,3c1,3
< 000000 1 \n
< 31 0a
< 000002
---
> 000000 1 \n
> 31 20 0a
> 000003
Run Code Online (Sandbox Code Playgroud)