diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。
diff命令的格式一般为:
diff [参数][文件或者目录1][文件或者目录2]
例如,有文件test1和test2:
将会输出:
格式的含义如注释所示。
diff 的normal 显示格式有三种提示:
a - add
c - change
d - delete
比较常用的是以合并的方式显示两个文件的不同:
输出如:
这种输出方式输出的内容可以用于使用patch命令进行打补丁包。patch命令我们稍后再看。
diff命令也可以比较两个文件夹的不同:
例如有两个文件夹testa和test,将test1和test2放进去:
得到:
第一部分是文件的信息
"---"表示变动前的文件,"+++"表示变动后的文件。
第二部分表示变动的位置
@@ -1,11 +1,5 @@
减号表示第一个文件,后面的表示第一行起一共11行。加号表示第二个文件。后面是第一行起一共5行。
接下来的表示区别的部分。
例如:
将得到:
这种模式中
“|”表示前后2个文件内容有不同
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容
我们可以先用diff命令生成patch文件。然后使用patch命令将第二个文件内容修改成第一个文件的内容。
例如上述的test1和test2:
之后test2的内容就会和test1内容一致了。
svn diff生成的patch也可以用于更新文件
比较两个文件内容的不同,主要有comm和diff两个命令。
主要用法:comm file1.txt file2.txt
注:在comm比较之前需要对两个文件进行sort !!!
可以输出在仅第一个文件里出现的、仅在第二个文件里出现的和两个文件共有的内容:
comm -1 file1.txt file2.txt # 不显示第一个文件特有的内容,显示第二个文件特有的内容和共有的内容
comm -2 file1.txt file2.txt # 不显示第二个文件特有内容
comm -3 file1.txt file2.txt # 不显示共有
comm -12 file1.txt file2.txt # 第一个和第二个共有
comm -23 file1.txt file2.txt # 第一个特有
comm -13 file1.txt file2.txt # 第二个特有
也可以专门比较某两列或某几列:
comm -12 <(sort file1.txt | cut -f1) <(sort file1.txt | cut -f2.txt) # 这个只能在前台运行
diff可以直接输出比较结果,对第一个文件提出修改建议使得第一个文件与第二个文件一致。
创建两个文件:cat file1.txt
one
two
three
第二个文件: file2.txt
one
two
文件夹内容比较:
diff -ruNa dir1/ dir2/
-------------------------------------------------------------------------------------------------------------------------------------------------------------I'm a line ! Thanks !----------------------------------------------------------------------------------------------------------------
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)