UNIX系统下diff的三种格式

时间:2021-12-01 22:13:22
UNIX系统下diff的三种格式

diff命令是UNIX系统中常用的一个命令,其功能是比较两个文本文件之间的差异。

目前diff的输出有三种格式,分别是:正常格式(normal diff)上下文格式(context diff)合并格式(unified diff)

1、正常格式

命令格式 :

diff <更改之前的文件名> <更改之后的文件名>

举例:
创建两个文件 file1.txt 和 file2.txt,内容分别如下:
what is your name?
my name is lilei.

what is your name?
my name is hanmeimei.

使用diff命令比价两个文件的不同:
diff file1.txt file2.txt

结果如下:
UNIX系统下diff的三种格式
注释:   
第一行:2c2   前一个2表示file1.txt的第2行有变动,c表示变动的模式 更改(change),此外变动模式还有 a 增加(addition),d 删除(deletion)
第二行: < my name is lilei.   < 表示从file1.txt文件中删除,后面是要删除的内容。
第三行: ---   用来分割file1.txt 和file2.txt
第四行:  > my name is hanmeimei.    > 表示添加到file2.txt文件中,后面是添加的内容。

2、上下文格式

命令格式
diff -c <更改之前的文件名> <更改之后的文件名>

举例:
diff -c file1.txt file2.txt

结果如下:
UNIX系统下diff的三种格式
注释:
第一行: *** file1.txt    2018-04-20 10:08:51.338188679 +0800
第二行:--- file2.txt    2018-04-20 10:09:41.387461602 +0800
以上两行显示两个文件的基本信息,文件名和时间,其中“***”表示更改之前的文件,“---”表示更改之后的文件

第三行: ***************   此行是一个分割线

第四行: *** 1,2 ****
第五行:   what is your name?
第六行: ! my name is lilei.
以上三行表示file1.txt文件有两行内容,从1-2,内容如第五、六行显示。
文件内容的每行前边会有一个标识符,空表示无改动,!表示有改动,- 表示被删除,+表示被增加

第七行: --- 1,2 ----
第八行:   what is your name?
第九行: ! my name is hanmeimei.
以上三行表示的含义同上,针对file2.txt文件

3、合并格式

命令格式
diff -u <更改之前的文件名> <更改之后的文件名>

举例:
diff -u file1.txt file2.txt

结果如下:
UNIX系统下diff的三种格式
注释:
第一行: --- file1.txt    2018-04-20 10:08:51.338188679 +0800
第二行: +++ file2.txt    2018-04-20 10:09:41.387461602 +0800
以上两行显示两个文件的基本信息,文件名和时间,其中“---”表示更改之前的文件,“+++”表示更改之后的文件

第三行: @@ -1,2 +1,2 @@
第四行:  what is your name?
第五行:-my name is lilei.
第六行: +my name is hanmeimei.
以上四行其实和上下文格式显示的内容是差不多的,只不过是将单独显示的文件内容合并到一起显示,这样更简单。对于两个文件相同的内容只显示一遍,而不同的内容分别显示。
-1,2 表示file1.txt有两行内容, +1,2表示file2.txt有两行内容  
显示的内容部分,每行前边也有一个标识符,空表示无变动,-表示删除,+表示增加

补充:Git命令中的diff采用的格式就是UNIX的合并格式