Diff 报告不同,但两行相同

Jie*_*eng 56 bash diff

我比较了 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 列输出。


Cha*_*ing 6

我发现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)