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

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

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

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

举个例子,如今有1个文件a.txt,里面内容以下:工具


咱们先经过复制一份文件b.txtthis

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

并把b.txt内容第二行改成其余的内容,以下:spa



(1)正常格式code

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

diff a.txt b.txt复制代码

执行完的结果以下:
cdn


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

行一行:2c2it


第一个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行内容。

相关文章
相关标签/搜索