diff 如何判断差异是变化(即替换)还是增删组合?

diff 如何判断差异是变化(即替换)还是增删组合?

我想知道如何diff判断差异是改变(即替换)还是增删组合?

我能找到的最好的diffutils 手册

'fct'

将第一个文件的范围 f 中的行替换为第二个文件的范围 t 中的行。这就像组合的添加和删除,但更紧凑。例如,“5,7c8,10”表示将文件 1 的第 5-7 行更改为文件 2 的第 8-10 行;或者,如果将文件 2 更改为文件 1,请将文件 2 的第 8–10 行更改为文件 1 的第 5–7 行。

例如,我有两个文件,每个文件有四行

$ paste f2 f3
0   1
1   2
3   3
5   6

我区分它们

$ diff f2 f3
1d0
< 0
2a2
> 2
4c4
< 5
---
> 6

为什么是

1d0
< 0
2a2
> 2

不是

1,2c1,2
< 0
< 1
---
> 1
> 2

反而?

我给出的替代方案和diff输出都具有3公共行,但我的替代方案将公共行之前的不同行视为c即替换,而diff输出将它们视为删除和添加的组合。

答案1

两个文件之间的 LCS 是1 3, 而不是3.因此,两个文件之间存在三个块,而不是两个块。

相关内容