阅读 845

Linux下文本比对方法:diff命令

diff是Unix系统的一个很重要的工具程序。它用来比较两个文本文件的差异,是代码版本管理的基石之一。 

diff命令的输出格式有三种:

  1. 正常格式(normal diff)
  2. 上下文格式(context diff)
  3. 合并格式(unified diff)

举个例子,现在有1个文件a.txt,里面内容如下:


我们先通过复制一份文件b.txt

sudo cp a.txt b.txt复制代码

并把b.txt内容第二行改为其他的内容,如下:



(1)正常格式

正常格式下我们无需加任何选项,直接如下比对就好:

 diff a.txt b.txt复制代码

执行完的结果如下:


我们一行一行来解释上图的含义。

行一行:2c2


第一个2表示文件a.txt中第2行有变化,后面的2表示a.txt通过变化成为b.txt中的第2行。中间的c就是具体的变化了。c表示改变(change),其它类型还有d删除(delete),a增加(addition)。


第二行:< line 2


表示a.txt文件中去除第2行的内容,其中小于号表示去除。


第三行:------


分隔线


第四行:> this is 2


表示b.txt文件中增加第2行的内容,其中大于号表示增加。


(2)上下文格式

由于在正常格式下,提示信息比较少,我们无法快速定位所修改的地方,经常需要打开文件才知道修改细节。所以,为了给出更多的信息,引入了上下文格式。它的使用命令如下:

diff -c a.txt b.txt复制代码


上图的输出结果的具体含义如下:

第1行和第2行表示修改前及修改后的文件及更新时间。下面的*** 1,3 ****表示a.txt文件显示的从第1行开始到第3行为止的内容。line 2前的叹号(!)表示该行有改动,如果该行被删除,则为减号(-),如果该行被增加,则为加号(+)。后面几行的含义类似。

(3)合并格式

这种格式是正常格式与上下文格式的综合版,同时这种格式也是git diff所采用的格式。使用这种格式的命令是:

diff -u a.txt b.txt复制代码


上图的输出结果详细含义如下:

第1行和第2行表示修改前及修改后的文件及更新时间。后面的-line 2表示原文件a.txt里的内容,+this is 2表示b.txt里的内容。


除了以上三种格式外,还有另外一直更直观的方式——并排格式。这种显示格式的命令格式如下:

diff a.txt b.txt -y -W 50复制代码


这种格式就是以并列的格式进行显示,也很直观明了。第2行里,有个“|”符号,表示这行有更改。另外,如果前面是“<”,表示后面文件比前面文件少了1行内容;如果是">",表示后面文件比前面文件多了1行内容。

文章分类
阅读
文章标签