当前位置: 首页>>技术问答>>正文


差异报告差异但两条线都相同

, ,

问题描述

我得到了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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1366.html,未经允许,请勿转载。