13

我想通过执行以下操作合并两个文件:

  1. 将两个文件的差异输出到一个临时文件中,然后
  2. 手动选择我要复制/保存的行。

这里的问题是diff -u只给了我一个文件行的上下文,而我想以统一的格式输出整个文件。

diff 有什么办法可以做到这一点吗?

4

5 回答 5

17

一种可能适合您的选择,

sdiff:文件的并排差异。

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

在那里,它会提示您要从哪个文件中保留哪些行。点击?然后enter寻求一点帮助。还man sdiff附有详细的商品。

(在我的发行版中,这些都打包在“diffutils”包 [fedora,centos] 中)

如果您需要自动化该过程,您可能想尝试 util merge,它将标记文件中的冲突。然而,这可能会让你回到第一方。

于 2013-06-03T17:14:36.400 回答
10

“我想以统一的格式输出整个文件。diff有什么办法可以做到这一点吗?”

是的。

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

如果您的文件长度少于 1000 万行,这应该可以工作。

于 2013-06-03T17:12:15.050 回答
8

您可以使用 -- 将两个文件与 diff 合并/组合

diff --line-format %L file1 file2
于 2017-08-09T02:04:35.197 回答
0

简单的答案是使用 -D 标志来合并文件并用 C 风格的 #ifdef 语句包围差异。

从文档中:

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

您可以按如下方式使用它:

$ diff -D NEWSTUFF file1 file2 > merged_file

然后我通常只是在编辑器中打开合并的文件并手动解决合并冲突。

您还可以使用选项来输出 ed 脚本等。

于 2016-09-14T19:06:45.070 回答
0

如果您是 emacs 用户,您可以使用“emerge”工具直接在 emacs 中执行此操作:

https://www.gnu.org/software/emacs/manual/html_node/emacs/Emerge.html

发布M-x emerge-files将打开一个交互式提示,其中包含文件 A、B 和合并文件的视图,以允许选择文件 A 和 B 之间不同的文本,将 A 的一部分插入 B 等等。

于 2019-02-12T17:29:36.640 回答