Побочные результаты unix diff?


108

Как я могу отобразить результаты команды 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 тоже может помочь. Удачи.
shellter

Ответы:


169

From 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

6
Также для больших различий просто используйте меньшее, чтобы получить красивое различие с возможностью прокрутки / поиска:diff -y /tmp/test1 /tmp/test2 | less
willbradley

Проверьте colordiff
Владислав Довгалец

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
EdwardTeach

40

С домашней страницы icdiff :

введите описание изображения здесь

Ваш терминал может отображать цвет, но большинство инструментов сравнения не используют его. Выделив изменения, icdiff может показать вам различия между похожими файлами, не мешая им. Это особенно полезно для выявления и понимания небольших изменений в существующих линиях.

Вместо того, чтобы пытаться заменить diff при любых обстоятельствах, цель icdiff - стать инструментом, к которому вы можете дотянуться, чтобы лучше понять, что изменилось, когда это не сразу видно из diff.

ИМХО, его вывод гораздо читабельнее, чем diff -y.


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

3
это должен быть принятый ответ, потому что просто -yпоказаны общие строки, что не то же самое, что diffи исходный вопрос. +1.
helix

лучшеdiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77

опаздываю на вечеринку :-(. но что есть -W $COLUMNS. Может кто-нибудь
поблагодарит

14

Ты можешь использовать:

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') дает параллельное различие. Это использование устарело; используйте вместо него параметр '--side-by-side' ('-y') для 'diff'. "
ntc2

7

Вы можете просто использовать:

diff -y fileA.txt fileB.txt | colordiff

Он показывает вывод, разделенный на две колонки и раскрашенный! ( colordiff)


1
Просто попробовал на OSX, и здесь он не работает. Возможно, это только для Linux.
Никола Петкански

colordiff нет на osx.
terry franguiadakis

Вы можете установить colordiff на OSX, используя формулу Homebrew brew install colordiff See colordiff
Хорхе Фернандо Матриали


6

Попробуйте cdiff - просмотр цветных, инкрементных различий в рабочей области или из стандартного ввода с поддержкой параллельного отображения и автоматического пейджера.



4

Если в ваших файлах непоследовательно используются пробелы и вкладки, может оказаться полезным включить -tаргумент для раскрытия вкладок:

diff -ty file1 file2

0

Расширенная команда сравнения с цветом, рядом и псевдонимом

Допустим, содержимое файла выглядит так:

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.