У меня есть два файла с небольшими отличиями. Обычный diff покажет мне различия между файлами. С помощью -c или -u я могу добавить контекст к каждому фрагменту. Какие параметры я могу передать diff, чтобы увидеть каждую неизмененную строку вместе с изменениями и получить различия в виде одного большого фрагмента?
Как я могу сравнить два файла с полным контекстом?
Ответы (3)
Используйте опцию "-y" для полного параллельного вывода
diff -y файл1 файл2
Дает вам вывод что-то вроде
* Lorem ipsum dolor sit amet, consectetuer adipiscing elit. * Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
* Praesent fringilla facilisis pede. * Praesent fringilla facilisis pede.
* Nulla sit amet tellus id massa luctus pellentesque. * Nulla sit amet tellus id massa luctus pellentesque.
* Pellentesque a neque nec elit aliquam congue. * Pellentesque a neque nec elit aliquam congue.
* Quisque rhoncus ultricies elit. * Quisque rhoncus ultricies elit.
* Pellentesque laoreet urna id arcu. * Pellentesque laoreet urna id arcu.
* Aenean non erat et elit egestas dictum. * Aenean non erat et elit egestas dictum.
* Proin ornare sem eget nulla. * Proin ornare sem eget nulla.
* Phasellus placerat convallis elit. * Phasellus placerat convallis elit.
* Donec ultricies metus non purus. * Donec ultricies metus non purus.
* Sed vel enim et nunc accumsan egestas. * Sed vel enim et nunc accumsan egestas.
* Cras eget elit in purus luctus ornare. * Cras eget elit in purus luctus ornare.
* In pharetra ligula sodales pede. <
* Morbi consectetuer mi vitae sem. * Morbi consectetuer mi vitae sem.
* Donec sollicitudin pretium erat. * Donec sollicitudin pretium erat.
* Cras facilisis nunc sed leo. * Cras facilisis nunc sed leo.
* Nunc varius ante sed nisi. * Nunc varius ante sed nisi.
> THIS SHOULDN'T BE HERE
> THIS SHOULDN'T EITHER!
* Aenean in quam sagittis est ornare ultricies. * Aenean in quam sagittis est ornare ultricies.
* Etiam dignissim scelerisque velit. * Etiam dignissim scelerisque velit.
* Mauris porta fringilla sapien. * Mauris porta fringilla sapien.
* Proin vitae nisl vitae mauris viverra tempor. * Proin vitae nisl vitae mauris viverra tempor.
* Maecenas quis arcu sed lorem mollis bibendum. * Maecenas quis arcu sed lorem mollis bibendum.
* Morbi sed turpis non risus molestie posuere. | * Morbi sed non risus molestie posuere.
* Curabitur id magna in nulla commodo tristique. * Curabitur id magna in nulla commodo tristique.
* Praesent quis nulla vel augue faucibus viverra. | * Praesent quis nulla BAD vel augue faucibus viverra.
* Sed interdum libero. | * Sed lacinia interdum libero.
> ANOTHER ADDITION
* Donec ultricies posuere arcu. * Donec ultricies posuere arcu.
* Etiam interdum auctor mi. * Etiam interdum auctor mi.
person
madlep
schedule
09.12.2008
Вы также можете переопределить поведение форматирования diff, чтобы получить желаемое поведение без использования параллельного режима:
diff --new-line-format='+%L' --old-line-format='-%L' --unchanged-line-format=' %L' file1 file2
Эта команда покажет вам полный файл в контексте и будет ближе всего по формату к diff -u file1 file2.
person
Alex B
schedule
09.12.2008
Спасибо за этот ответ - есть идеи, как добавить к этому кусок? Я хочу использовать
diff2html.py, который принимает унифицированные различия; и я должен вручную сказать: (echo -e "--- _L.txt\n+++ _R.txt\n@@ -1,100 +1,100 @@" && diff --new-line-format ... _L.txt _R.txt) | python diff2html.py > LR.html для принудительной окраски синтаксиса; однако я просто произвольно добавляю туда номера фрагментов, пока он не начнет работать, и я бы предпочел diff вывести фрагмент для этого. Является ли это возможным? Ваше здоровье!
- person sdaau; 16.09.2013
Это получило формат, похожий на конфликт слияния, как я и хотел!
diff --new-line-format="$(printf '======= test1.txt\n%%L>>>>>>>')" --old-line-format="$(printf '<<<<<<< test2.txt\n%%L')" --unchanged-line-format='%L' test1.txt test2.txt
- person TamusJRoyce; 21.12.2020
Решение состоит в том, чтобы установить размер контекста (аргумент -U), который больше, чем сам файл:
diff -U 1000000 file1.txt file2.txt
person
Martin Monperrus
schedule
29.11.2017
Обратите внимание, что это ничего не выводит для файлов без различий. Это неудобно, если вам нужно сделать это для целой кучи файлов, где некоторые могут вообще не иметь изменений
- person raarts; 07.11.2019
Спасибо за Ваш ответ! Небольшое примечание: на моей машине вместо
-U 1000000 я могу просто использовать -U -1 и не беспокоиться об использовании достаточно большого числа. (Я не уверен, почему это так; может быть, это потому, что -1 оценивается как огромное число без знака.) Это все еще связано с той же проблемой, которую поднял @raarts, - что он ничего не делает для файлов без различий.
- person J-L; 18.02.2020
diff -U -1, как указал JL - person Gunar Gessner   schedule 04.06.2021