Побочные результаты 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
719016
источник
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
fedorqui 'ТАК, хватит вредить'
источник
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.

Timmfin
источник
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

для отображения бок о бок.

srpatch
источник
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

Воспользуйтесь -yопцией:

diff -y file1 file2
прямая кишка
источник
6

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

ymattw
источник
5

Вы можете использовать vimdiff.

Пример:

vimdiff file1 file2
Эдуардо Куомо
источник
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
Ахмет
источник