unix diff的左右结果?

719*_*016 88 unix bash diff

如何将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
Run Code Online (Sandbox Code Playgroud)

我希望有类似的东西:

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
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 138

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

-y, --side-by-side
       output in two columns
Run Code Online (Sandbox Code Playgroud)

因此,说:

diff -y /tmp/test1  /tmp/test2
Run Code Online (Sandbox Code Playgroud)

测试

$ cat a                $ cat b
hello                  hello
my name                my name
is me                  is you
Run Code Online (Sandbox Code Playgroud)

我们来比较一下:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`diff`具有硬编码的最大输出宽度(130列).添加diff选项`--width = $ COLUMNS`将其设置为您的终端宽度. (31认同)
  • 更好的 `diff --width=$COLUMNS --suppress-common-lines --side-by-side ab` (9认同)
  • 对于大的差异,只需要管道就像这样一个很好的可滚动/可搜索的差异:`diff -y/tmp/test1/tmp/test2 | less` (6认同)
  • @rubo77根据您设置制表符扩展的方式,您可能还希望将制表符扩展为空格,以便输出在列中正确排列: `diff --expand-tabs --width=$COLUMNS --suppress-common-行--并排 ab` (5认同)
  • 检查颜色差异 (2认同)

tim*_*fin 31

来自icdiff的主页:

在此输入图像描述

您的终端可以显示颜色,但大多数差异工具都没有充分利用它.通过突出显示更改,icdiff可以显示类似文件之间的差异而不会妨碍.这对于识别和理解现有线路中的小变化特别有用.

icdiff的目标不是试图成为所有情况下的差异替代品,而是成为一种工具,可以更好地了解在差异不明显的情况下所发生的变化.

恕我直言,它的输出比它更具可读性diff -y.


小智 12

diff -y --suppress-common-lines file1 file2
Run Code Online (Sandbox Code Playgroud)

  • @samshers `-W` 定义宽度,如果您有一个大终端并且想要使用它,这很有用。`$COLUMNS` 是一个内置函数,它告诉您当前终端的宽度。坦率地说,我没有看到它对我的使用有什么好处。 (5认同)
  • 这应该是一个可以接受的答案,因为只有-y也显示了常见的行,这与diff和原始问题并不相同。+1。 (2认同)
  • 更好的 `diff -W $COLUMNS --suppress-common-lines -y file1 file2` (2认同)
  • @mazunki,我发现它在使用大型终端时很有用,因为长行可能会被“-y --suppress-common-lines”截断。我还添加了“--color”修饰符,从而获得“$ diff --color -y --suppress-common-lines -W $COLUMNS file1 file2”。 (2认同)

srp*_*cha 11

您可以使用:

sdiff  file1 file2
Run Code Online (Sandbox Code Playgroud)

要么

diff -y file1 file2
Run Code Online (Sandbox Code Playgroud)

要么

vimdiff file1 file2
Run Code Online (Sandbox Code Playgroud)

并排显示.

  • 我想知道 `diff -y` 和 `sdiff` 之间有什么区别?他们的输出看起来和我一样。 (2认同)

Chr*_*our 10

您应该sdiff并排合并文件差异.阅读man sdiff完整的故事.

  • 在我的系统(GNU/Linx)上,`sdiff`似乎与`diff -y`做同样的事情,`sdiff` info文档说它已被弃用:"'sdiff'没有' - output'(' - o')产生并排的差异.这种用法已经过时;使用'diff'的'--side-by-side'(' - y')选项代替." (2认同)

Edu*_*omo 7

您可以使用vimdiff.

例子:

vimdiff file1 file2
Run Code Online (Sandbox Code Playgroud)


小智 6

你可以简单地使用:

diff -y fileA.txt fileB.txt | colordiff
Run Code Online (Sandbox Code Playgroud)

它显示输出分为两个列并着色!(colordiff)


Buc*_*ket 6

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

diff -ty file1 file2
Run Code Online (Sandbox Code Playgroud)


rec*_*que 5

使用-y选项:

diff -y file1 file2
Run Code Online (Sandbox Code Playgroud)


小智 5

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