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 теж може допомогти. Удачі.
обстріл

Відповіді:


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

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

перевірити 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
EdwardTeach

40

З домашньої сторінки icdiff :

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

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

Замість того, щоб намагатися стати різною заміною для всіх обставин, мета icdiff - це бути інструментом, до якого можна досягти, щоб отримати кращу картину того, що змінилося, коли це не відразу очевидно з 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? Їхній результат мені схожий.
Хукс

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.
махровий franguiadakis

Ви можете встановити colordiff на OSX, використовуючи Homebrew brew install colordiff Див. Формулу colordiff
Хорхе Фернандо Матрікалі


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.