diff
参考
http://en.wikipedia.org/wiki/Diff
diff是一个比较工具,它比较两个文件,然后输出两个文件的差异,这个差异文件叫做diff文件。它通常被用来找出同一文件两个版本之间的差异。所谓差异,就是指从原文件到新文件增加了哪些,删除了哪些。
diff的算法
实现diff功能的算法基础是最长公共子序列 longest common subsequence problem
http://en.wikipedia.org/wiki/Longest_common_subsequence_problem.
中文解释见
http://hxraid.iteye.com/blog/622462
例如下面两个串
S1: a b c d f g h j q z
S2: a b c d e f g i j k r x y z
根据LCS算法(这个算法貌似很复杂,这里略掉了),得到其最长公共子序列(LCS)是:
LCS: a b c d f g j z
示意图如下:
(这个示意图是不严谨的,因为LCS是有顺序的,而集合却没有顺序性)
根据这个序列,就可以得到S2串和S1串间的差异:
如果某个字符S1中有,LCS中没有,表示S2中删除了这个字符,如上图的‘h’;
如果S2中有,而LCS中没有,则表示S2中增加了这个字符,如上图的“e,I,k,r,x,y”。
其结果如下:
e h i q k r x y
+ - + - + + + +
这个结果就是diff比较后输出的差异文件。
这里diff的是字符串,实际的diff以"行"为单位来比较两个文本文件的。
如何读diff文件格式:
diff文件格式有列举模式,命令模式和上下文模式。
命令模式表示从原文件到新文件需要执行哪些命令才能实现。命令主要就是add,change,del。
命令模式可能主要便于程序自动执行的,人不太好读。
上下文模式则是由区块(chunk)组成的,区块列举原文件和新文件中有不同的地方,因为有上下文,所以更便于阅读。
看上下文模式的:
比如如下两个文件:
其diff的结果文件,上下文格式如下(部分结果):
最开始的两行表示了这个diff文件是哪两个文件间的差异。
@@表示一个区块的开始,这个区块到下一个“@@”为止。
@@ -1,3 +1,9 @@
+This is an important
+notice! It should
+therefore be located at
+the beginning of this
+document!
+
This part of the
document has stayed the
same from version to
-1,3表示原文件的第1行到第3行间;
+1,9表示新文件的第1行到第9行
第3行和第9行,这两个行数不同,表示从源文件到新文件增加了几行。
带加号(+)的行,表示增加的,不带号的,表示原来就有的;
@@ -5,16 +11,10 @@
be shown if it doesn't
change. Otherwise, that
would not be helping to
-compress the size of the
-changes.
-
-This paragraph contains
-text that is outdated.
-It will be deleted in the
-near future.
+compress anything.
It is important to spell
-check this dokument. On
+check this document. On
带减号(-)的,表示删除了这几行。
其余同上。
介绍完毕。
- 大小: 2.2 KB
- 大小: 8.4 KB
- 大小: 4.6 KB
分享到:
相关推荐
`diff`命令支持多种输出格式,包括上下文格式(-c)、统一格式(-u)和逐行格式(-d)。其中,统一格式通常是最常用的一种,它显示了差异所在的行号,以及上下各三行的上下文信息,便于理解变化的语境。 除了比较...
标题"diff文件(夹)比对源码 c#"指的是使用C#语言开发的文本和文件夹比对的源码实现。通过这样的工具,开发者可以快速地识别代码变动,这对于协同开发和代码审查尤其有用。 描述中提到的两点关键功能是: 1. **...
**WinMerge文件diff工具** WinMerge是一款在Windows操作系统下广泛使用的文件差异对比工具,它能够帮助用户快速识别并解决两个文件或目录之间的差异。这款工具以其直观易用的界面、强大的对比功能以及丰富的自定义...
4. `diff.bpf`和`diff.bpr`:这些可能是某种中间格式的文件,用于存储`diff`算法处理过程中的数据,或者是在特定环境中优化`diff`性能的配置文件。 5. `diff.res`和`diff.tds`:这些可能是资源文件或编译器生成的...
标题中的“一个十分好用的hex文件编辑及diff工具”指的是该软件主要功能是用于编辑十六进制(hex)格式的文件以及进行差异比较(diff)。在计算机领域,hex编辑器是一种高级工具,允许用户查看和修改二进制文件的...
2. **段落比较**:除了字符级别的比较,jsdiff还支持对整个段落进行比较,适合处理大型文本文件或多行代码。 3. **HTML高亮**:该库能够生成HTML格式的比较结果,用不同的颜色高亮显示差异部分,使得人眼阅读更直观...
语法格式:diff [参数] [目录] 常用参数: -a diff预设只会逐行比较文本文件 -b 不检查空格字符的不同 -W 在使用-y参数时,指定栏宽 -x 不比较选项中所指定的文件或目录 -X 您可以将文件或目录类型...
在Linux操作系统中,`diff`是一个非常重要的命令行工具,用于比较两个文件或目录的差异。这个工具在软件开发、版本控制以及系统管理等场景中都有广泛应用。`diff`源码的提供,使得用户可以深入理解其内部工作原理,...
在 Linux 系统中,`diff` 是一个非常重要的命令工具,它主要用于比较两个文本文件之间的差异,并以特定格式输出这些差异。这对于版本控制、代码审查、文件对比等场景极为有用。 #### 二、`diff` 命令的基本概念 1....
Diff算法是一种广泛应用于文本文件比对的技术,它能够找出两个文本文件之间的差异并生成一个最小的编辑脚本,使得一个文件可以通过这些编辑操作变为另一个文件。这个编辑脚本通常包括插入、删除和替换等操作。在软件...
2. **输出格式**:`diff`输出可以是统一格式(-u选项)、上下文格式(-c选项)或其他自定义格式,方便用户理解和处理差异。 3. **比较类型**:除了比较两个文件,`diff`还能比较目录,找出目录中文件的不同。 4. **...
国外一款diff工具,简洁的英文界面。可比较两个文件夹的异同、两个文件的异同,适用于代码版本比较以及文件备份时的查缺补漏
通过找到LCS,diff可以生成一个补丁文件(patch),描述了如何将一个文件转换成另一个文件的指令。 在实践中,diff算法通常包含以下步骤: 1. **分块**:将两个文件分割成多个小块,以便于比较。 2. **匹配块**:...
Foobar 2000播放器听iso提取出来的diff文件的插件,Current version1.4, released on 2011-05-19。接解压去foobar的components目录就可以了
`diff`工具的主要用途是对比两个文本文件或者两个目录之间的差异,并以可读的格式输出它们的不同之处。在Windows环境下,这个工具可以用于编写批处理脚本,以便自动化地检查文件或代码的变更,这对于开发者和系统...
在IT领域,`diff`是一种广泛使用的工具,用于比较两个文件或文本的差异。这个概念源自于Unix操作系统中的命令行工具,但现在已经被许多其他平台和编程语言所采用,包括Java。`diff`算法的核心在于找出两个文件之间的...
Linux 文件处理命令 - wc、sort 和 diff 命令 Linux 操作系统中,文件处理是日常维护和管理中非常重要的一部分。wc、sort 和 diff 命令是 Linux 中三个非常有用的文件处理命令,本文将详细介绍这三个命令的使用方法...
这个API包括了多个方法,如`diff()`用于计算两个输入序列的差异,`patch()`用于应用差异到原始序列以生成新的序列,以及`unifiedDiff()`用于生成统一格式的差异报告,这是Git等版本控制系统常用的格式。 **3. 差异...
文件比较算法剖析 DIff 文件比较算法是计算机科学中的一种常见算法,用于比较两个文本文件的相似度和差异。在这篇文章中,我们将对文件比较算法进行剖析,并详细介绍其实现原理和算法思路。 文件比较算法的主要...