使用diff手动合并两个文件

时间:2013-06-03 17:02:41

标签: linux diff

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

  1. 将两个文件的差异输出到临时文件和
  2. 手动选择我要复制/保存的行。
  3. 这里的问题是diff -u只给我一个文件行的上下文,而我想以统一的格式输出整个文件。

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

5 个答案:

答案 0 :(得分:12)

一个可能适合您的账单,

sdiff:文件的并排差异。

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

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

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

如果您需要自动执行该过程,您可能需要尝试使用util merge,它将标记文件中的冲突。但是,这可能会让你回到原点。

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:2)

您可以使用 -

将两个文件合并/合并为diff
diff --line-format %L file1 file2

答案 3 :(得分:0)

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

来自文档:

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

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

$ diff -D NEWSTUFF file1 file2 > merged_file

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

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

答案 4 :(得分: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中,等等。 / p>