说我有一个文件A,其中包含:
a = 5
文件B,像这样:
b = 5
现在,很明显diff会产生类似这样的东西(补丁):
1C1
< a = 5
---
> b = 5
修补文件A显然会将其内容替换为文件B的内容,从而导致文件A包含
b = 5
然而,我想要做的是与众不同。我希望合并文件A和B的内容,以便在修补文件A后它将包含
a = 5
b = 5
我的情况如果课程方式比我的例子更复杂,但我想我已经弄明白了,除了最后的总结性差异/补丁。
tl; dr:我希望diff / patch能够求和,而不是替换文件中的差异。我怎么能这样做?
答案 0 :(得分:2)
您不想修补某些文件,而是尝试合并它们。有很多工具可以帮助你,例如看看kdiff
!
修改强>: 更多工具:
至少vim -d
将完成这项工作; - )
答案 1 :(得分:0)
你很少谈论你想要解决的问题(或者你过多地谈论你采取的方法是如何工作的)。更有趣的是你想要做什么。
也许你可以完成
sort -u A B
因为它会根据您提供的输入提供所需的输出。
答案 2 :(得分:0)
来自GNU diffutils包的diff命令提供了通过插入#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
。