Diff + patch - сумма вместо замены
Скажем, у меня есть файл A, который содержит это:
а = 5
И файл B, вот так:
б = 5
Теперь очевидно, что diff выдаст что-то вроде этого (патч):
1c1
< a = 5
---
> б = 5
Патч-файл A, очевидно, заменит его содержимое на файл B, в результате чего файл A, содержащий
б = 5
То, что я хочу сделать, однако, отличается. Я хочу, чтобы содержимое файлов A и B слилось, чтобы после исправления файла A оно содержало
а = 5
б = 5
Мой случай, конечно, более сложный, чем мой пример, но я думаю, что я понял это за исключением суммирования diff/patch в конце.
tl; dr: я хочу, чтобы diff/patch суммировал, а не заменял различия в файлах. Как я могу это сделать?
3 ответа
Вы не хотите исправлять некоторые файлы, вы пытаетесь объединить их. Есть много инструментов, которые помогут вам, например, взглянуть на kdiff
!
Изменить: еще несколько инструментов:
- сливаться
- gPyFm
- diff3
- tkdiff
- P4Merge
По крайней мере vim -d
сделаю работу;-)
Вы очень мало рассказываете о том, какую проблему вы пытаетесь решить (или слишком много говорите о том, что выбранный вами подход не сработал). Что интереснее, что вы хотите сделать.
Возможно, вы могли бы сделать с
sort -u A B
Потому что он даст нужный вам вывод вместе с вводимыми вами данными.
Команда diff из пакетов GNU diffutils предоставляет возможность объединить два разных файла, вставив #ifdef
инструкции препроцессора. Например, рассмотрим 2 файла f1
а также f2
(отображается рядом):
line 1 | line 1
line 2 | line 2
line 3a | line 3a
line 4 | line 4
line 5a | line 5a
призвание diff -D MARKER f1 f2
будет производить этот объединенный вывод:
line 1
line 2
#ifndef MARKER
line 3a
#else /* MARKER */
line 3b
#endif /* MARKER */
line 4
#ifndef MARKER
line 5a
#else /* MARKER */
line 5c
#endif /* MARKER */
Вы можете удалить инструкции препроцессора, чтобы получить чистый объединенный файл, например, используя grep
:
diff -D MARKER f1 f2 | grep -v "MARKER"
Обратите внимание, что токен MARKER
не должно существовать в исходных входных файлах, поэтому лучше использовать что-то более особенное, например, случайный токен, например c11ced4751ef4b3aa60e512bdaa184210441b4ed0
,