差异报告差异,但两行相同


55

我比较了2个文件并得到

1c1
< 1
---
> 1

两个文件都只包含“ 1”。这有什么不同?


请发布两个文件的内容;)
Rinzwind

5
如果您使用的是diff,则该-u选项可能更易于理解。
Lekensteyn 2011年

@Rinzwind,两个文件都只包含文本1,但是如果您想查看更多内容,请单击pastebin.com/byiqdie1
孟杰

抱歉。当我这样做时,它不是。一定有所不同。做一个cp 1 2(所以覆盖2),然后您可以100%b确信它们是相同的;)
Rinzwind 2011年

2
vimdiff file1 file2?:D
dylnmc 2015年

Answers:


68

第一行:a代表已添加,d已删除和c已更改。原始文件的行号出现在这些字母的前面,修改后的文件的行号出现在这些字母的后面。

第二行:与<的行来自文件1,与文件2不同。

第三行是分隔线。

第四行:与>的行来自文件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
+ test2  
 测试3

该格式以与上下文格式相同的两行标题开头,不同之处在于原始文件以“ ---”开头,新文件以“ +++”开头。之后是一个或多个包含文件中的行差异的变更请求。不变的上下文行之前带有空格字符,加法行之前带有加号,删除行之前带有减号。

一些有用的选项:

-b 忽略空白量的变化。

-w 忽略所有空白。

-B 忽略所有空白行。

-y 在2列中输出。


如何检查是否有隐藏的字符?无论如何,有没有忽略隐藏字符的方法(也许只是不包括换行符和制表符?)我想大多数隐藏字符都是偶然的吗?
孟梦

我输入了一些有用的选项(从man diff; 复制))
Rinzwind

我注意到使用-b标志有效。嗯,我看不到gedit中空格的区别:)
孟洁

@JiewMeng od -x1z在两个文件上运行并比较od输出。它应该找到文件之间的任何隐藏差异。
lgarzo 2013年

6

当比较带有不可打印字符的文件时,我发现od(八进制转储)非常方便(特别是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

1

我有同样的问题,我找到了一个可能有用的解决方案,请使用以下命令:

dos2unix <file1> <file2>

其中一个可能是dos / windows格式,另一个可能是UNIX格式

我这样做之后,差异就很好了!



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.