首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何理解diff3的‘-a’和‘-e’的不同输出?

我应该如何理解diff3的‘-a’和‘-e’的不同输出?
EN

Unix & Linux用户
提问于 2018-11-10 17:32:16
回答 1查看 95关注 0票数 2

散装手册说,在diff3 -A mine older yours

‘--show- all’(‘-A’)选项的作用类似于‘-e’选项,只不过它括号冲突,它输出从olderyours的所有更改,而不仅仅是未合并的更改。

我有三个文件,每个文件都有四行数字

代码语言:javascript
复制
$ paste f1 f2 f3
0   0   1
2   1   2
2   3   3
4   5   6

如果没有合并的更改,那么-A-e都应该只输出未合并的更改,这是否正确?

如何理解-A-e的下列不同输出?我想我缺乏一些知识来理解由ed生成的-A脚本。例如,我不确定这个命令在-A输出的末尾做什么。通常,a命令后面跟着要添加的行,但在命令后面似乎没有任何行:

代码语言:javascript
复制
0a
<<<<<<< f1
.

谢谢。

在从f2f3的更改中,未合并的更改包括

代码语言:javascript
复制
$ diff3 -e f1 f2 f3
1,4c
1
2
3
6
.

f2f3的所有更改,包括未合并的更改和合并的更改,都是:

代码语言:javascript
复制
$ diff3 -A f1 f2 f3
4a
||||||| f2
0
1
3
5
=======
1
2
3
6
>>>>>>> f3
.
0a
<<<<<<< f1
.
EN

回答 1

Unix & Linux用户

发布于 2019-04-25 17:32:54

如果将diff3 -A生成的D1脚本应用到原始文件中,您将看到它实际上做了什么:

代码语言:javascript
复制
$ diff3 -A f[123] >script.ed

(我在这里使用patch,但您也可以使用ed,但是如果要将缓冲区写回文件(w)或打印到终端(%p),则必须在脚本的末尾添加一个命令。)

代码语言:javascript
复制
$ patch f1 script.ed
Hmm...  Looks like an ed script to me...
Patching file f1 using Plan A...
done
代码语言:javascript
复制
$ cat f1
<<<<<<< f1
0
2
2
4
||||||| f2
0
1
3
5
=======
1
2
3
6
>>>>>>> f3

这表明,对该文件的这一部分(在这个特定示例中恰好是整个文件)的编辑是一个冲突( <<<<<<<>>>>>>>之间“括号内”)。它通过向您提供f1 ("my“)的内容,以及f2f3中的内容(分别为”旧文件“和”您的文件“)来说明冲突是什么。

这与diff3 -e产生的不同之处在于,diff3 -e生成的ed脚本将f1转换为f3,而忽略了f2中可能发生的冲突:

代码语言:javascript
复制
$ diff3 -e f[123] >script.ed
代码语言:javascript
复制
$ patch f1 script.ed
Hmm...  Looks like an ed script to me...
Patching file f1 using Plan A...
done
代码语言:javascript
复制
$ cat f1
1
2
3
6

因此,当手册中说“它括号冲突”时,意味着如果将diff作为补丁应用,它将将这些冲突标记插入到结果文件中。

当涉及到阅读差异时,如果您不了解ed,那就有点困难了。

代码语言:javascript
复制
4a
||||||| f2
0
1
3
5
=======
1
2
3
6
>>>>>>> f3
.
0a
<<<<<<< f1
.

最后一部分,你的评论,

代码语言:javascript
复制
0a
<<<<<<< f1
.

在正在编辑的文件顶部插入文字行<<<<<<< f1。这样,diff本身就不必包含f1的原始内容(正在修补的文件)。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/480987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档