Вручную объединить два файла с помощью diff

Я хотел бы объединить два файла, выполнив следующие действия:

  1. выведите разницу из двух файлов во временный файл и
  2. вручную выберите строки, которые я хочу скопировать / сохранить.

проблема здесь в том, что diff -u дает мне только файловые строки контекста, в то время как я хочу вывести весь файл в унифицированном формате.

есть ли способ, которым diff может это сделать?

4 ответов


"Я хочу вывести весь файл в унифицированном формате. Есть ли способ, которым diff может это сделать?"

да.

diff -U 9999999 file1.txt file2.txt > diff.txt

Это должно работать, если ваши файлы имеют длину менее 10 миллионов строк.


один вариант, который может соответствовать счет для вас,

sdiff: side-by-side diff файлов.

sdiff -o merged.file left.file right.file

как только там, он подскажет вам, какие строки вы хотите сохранить из какого файла. Хит ? а то enter за небольшую помощь. Также man sdiff С подробным товарами.

(в моем дистрибутиве они поставляются в упаковке "diffutils" [fedora, centos])

Если вам нужно автоматизировать процесс, то вы могли хотеть попробовать util merge, который будет отмечать конфликты в файлах. Тем не менее, это может поставить вас на место.


простой ответ заключается в использовании флага-D для объединения файлов и окружения различий с помощью операторов C style #ifdef.

из документации:

-D NAME  --ifdef=NAME
          Output merged file to show `#ifdef NAME' diffs.

Вы можете использовать его следующим образом:

$ diff -D NEWSTUFF file1 file2 > merged_file

обычно я просто открываю объединенный файл в редакторе и разрешаю конфликты слияния вручную.

вы также можете использовать опции для вывода скрипта ed и т. д.


вы можете объединить / объединить два файла с diff, используя --

diff --line-format %L file1 file2