我想通过执行以下操作合并两个文件:
- 将两个文件的差异输出到一个临时文件中,然后
- 手动选择我要复制/保存的行。
这里的问题是diff -u
只给了我一个文件行的上下文,而我想以统一的格式输出整个文件。
diff 有什么办法可以做到这一点吗?
一种可能适合您的选择,
sdiff
:文件的并排差异。
sdiff -o merged.file left.file right.file
在那里,它会提示您要从哪个文件中保留哪些行。点击?
然后enter
寻求一点帮助。还man sdiff
附有详细的商品。
(在我的发行版中,这些都打包在“diffutils”包 [fedora,centos] 中)
如果您需要自动化该过程,您可能想尝试 util merge
,它将标记文件中的冲突。然而,这可能会让你回到第一方。
“我想以统一的格式输出整个文件。diff有什么办法可以做到这一点吗?”
是的。
diff -U 9999999 file1.txt file2.txt > diff.txt
如果您的文件长度少于 1000 万行,这应该可以工作。
您可以使用 -- 将两个文件与 diff 合并/组合
diff --line-format %L file1 file2
简单的答案是使用 -D 标志来合并文件并用 C 风格的 #ifdef 语句包围差异。
从文档中:
-D NAME --ifdef=NAME
Output merged file to show `#ifdef NAME' diffs.
您可以按如下方式使用它:
$ diff -D NEWSTUFF file1 file2 > merged_file
然后我通常只是在编辑器中打开合并的文件并手动解决合并冲突。
您还可以使用选项来输出 ed 脚本等。
如果您是 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 等等。