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
结果如下:
注释:
第一行: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
结果如下:
注释:
第一行: *** 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
结果如下:
注释:
第一行: --- 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的合并格式