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,

Другие вопросы по тегам