unix diff的并行结果?


106

如何才能并排绘制unix diff命令的结果,而不是一个接一个地显示差异?参见以下示例:

    diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf
< asdfsad
< fsaf
< fdsadf
---
> asdfsafdsf
> saf
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa
< fd
---
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> safa

我想要一些类似的东西:

diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf       > asdfsafdsf
< asdfsad        > saf       
< fsaf
< fdsadf
---
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa               > sadf
< fd              > sadf
---               > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > safa

vimdiff也可以提供帮助。祝好运。
剥壳机

Answers:


168

从中man diff,您可以-y并排使用。

-y, --side-by-side
       output in two columns

因此,说:

diff -y /tmp/test1  /tmp/test2

测试

$ cat a                $ cat b
hello                  hello
my name                my name
is me                  is you

让我们比较一下:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you

39
请注意,它diff具有硬编码的最大输出宽度(130列)。添加diff选项--width=$COLUMNS以将其设置为终端宽度。
ntc2 2013年

6
同样,对于大型差异,只需将类似的内容通过管道传递给一个不错的滚动/可搜索差异即可:diff -y /tmp/test1 /tmp/test2 | less
willbradley16年

签出colordiff
Vladislavs Dovgalecs

5
更好diff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77

@ rubo77根据您设置标签扩展的方式,您可能还希望将标签扩展到空格,以便输出在各列中正确diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
排列

40

从icdiff的主页

在此处输入图片说明

您的终端可以显示颜色,但是大多数差异工具都无法很好地利用它。通过突出显示更改,icdiff可以向您显示相似文件之间的差异,而不会妨碍您。这对于识别和理解现有生产线中的细微变化特别有用。

icdiff的目标不是要在所有情况下都替换为diff,而是要成为一种工具,使您可以更好地了解在diff中不能立即发现更改的情况。

恕我直言,其输出比 diff -y


29
diff -y --suppress-common-lines file1 file2

3
这应该是可以接受的答案,因为它也-y显示了共同之处,这与正义diff和原始问题并不相同。+1。
螺旋

更好diff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77

13

您可以使用:

sdiff  file1 file2

要么

diff -y file1 file2

要么

vimdiff file1 file2

并排显示。


2
我想知道diff -y和之间有什么区别sdiff?它们的输出与我看起来相同。
Hux

11

您应该具有sdiff文件差异的并排合并。阅读man sdiff全文。


2
在我的系统(GNU / Linx)上sdiff似乎做同样的事情,diff -y并且sdiff信息文档说它已被弃用:“'sdiff'不带'--output'('-o')会产生并排的差异。这种用法已过时;请改用'diff'的'--side-by-side'('-y')选项。”
ntc2 2013年



6

尝试cdiff-在工作区中或从stdin中并排和自动分页器支持查看彩色,增量差异。



4

如果您的文件使用空格和制表符不一致,则包含-t扩展制表符的参数可能会有所帮助:

diff -ty file1 file2

1

具有颜色,并排和别名的增强的diff命令

假设文件内容如下:

cat /tmp/test1.txt
1
2
3
4
5
8
9

cat /tmp/test2.txt
1
1.5
2
4
5
6
7

现在并排比较

diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7

您可以定义要使用的别名

alias diff='diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always'

然后新的差异结果:

diff /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7
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.