问题描述
我得到了diff-ed 2个文件
1c1
< 1
---
> 1
这两个文件只包含”1″。这有什么不同?
最佳解决方案
第1行:a
代表已添加,d
代表已删除,c
代表已更改。原始文件的行号出现在这些字母之前,修改后的文件的行号出现在字母之后。
第二行:<
行来自文件1,与文件2不同。
第3行是分隔符。
第4行:>
行来自文件2,与文件1不同。
(如果你看过=
,则表示两个文件中的行相同)
你的问题可能是空格或其他non-human可读字符:那些也会引发差异。
有一些操作输出的选项。
例:
rinzwind@discworld:~$ more 1
test
test2
test3
rinzwind@discworld:~$ more 2
test
test2
test3
上下文格式:
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 ****
test
! test2
test3
--- 1,3 ----
test
! test2
test3
“!”表示两个文件中对应的行之间的变化。 “+”表示添加一行,而空格表示未更改的行。补丁的开头是文件信息,包括完整路径和时间戳。每个块的开头是适用于文件中相应更改的行号。三个星号组之间出现的数字范围适用于原始文件,而三个短划线组适用于新文件。 hunk范围指定相应文件中的起始和结束行号。
扩展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 @@
test
-test2
+test2
test3
格式以与上下文格式相同的two-line标头开头,但原始文件前面是”—“,新文件前面是”+++”。在此之后是一个或多个包含文件中行差异的更改。未更改的上下文行前面有空格字符,附加行前面有加号,删除行前面有减号。
一些有用的选择:
-b
忽略空白量的变化。
-w
忽略所有空白区域。
-B
忽略所有空白行。
-y
输出2列。
次佳解决方案
我发现od(八进制转储)在比较具有non-printable字符的文件时非常方便(特别是差异决定的文件是”binary”,因此只告诉你它们确实不同)。
在下面的示例中,我创建了一对可能与原始文件类似的文件,然后使用原始输出执行diff;接下来我在几个不同的”od”输出上做差异。
$ echo 1> 1 $ echo“1”> 2 $ diff 1 2
1c1
< 1
- ---
> 1
$ 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
$ 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