打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
shell diff
diff命令的使用
摘要:本文详细介绍了diff命令的基本用法,diff以逐行的方式,比较文本文件的异同处。所是指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。
有这样两个文件:

程序清单1 :hello.c

#include <stdio.h>

int main(void)
{
    char msg[] = "Hello world!";
    
    puts(msg);
    printf("Welcome to use diff commond.\n");
   
    return 0;   
}


程序清单2:hello_diff.c

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char msg[] = "Hello world,fome hello_diff.c";
   
    puts(msg);
    printf("hello_diff.c says,'Here you are,using diff.'\n");
   
    return 0;   
}

我们使用diff命令来查看这两个文件的不同之处,有一下几种方便的方法:
1、普通格式输出:
[root@localhost diff]# diff hello.c hello_diff.c
1a2
> #include <stdlib.h>
5c6
<       char msg[] = "Hello world!";
---
>       char msg[] = "Hello world,fome hello_diff.c";
8c9
<       printf("Welcome to use diff commond.\n");
---
>       printf("hello_diff.c says,'Here you are,using diff.'\n");
[root@localhost diff]#

上面的“1a2”表示后面的一个文件"hello_diff.c"比前面的一个文件"hello.c"多了一行
"5c6"表示第一个文件的第5行与第二个文件的第6行有区别

2、并排格式输出
[root@localhost diff]# diff hello.c hello_diff.c -y -W 130  //-y以并列的方式显示文件的异同之处;-W<宽度>或--width<宽度>  在使用-y参数时,指定栏宽

#include <stdio.h>                                              #include <stdio.h>
                                                              > #include <stdlib.h>

int main(void)                                                  int main(void)
{                                                               {
        char msg[] = "Hello world!";                          |         char msg[] = "Hello world,fome hello_diff.c";

        puts(msg);                                                      puts(msg);
        printf("Welcome to use diff commond.\n");             |         printf("hello_diff.c says,'Here you are,using diff.'\

        return 0;                                                       return 0;
}                                                               }
[root@localhost diff]#
这种并排格式的对比一目了然,可以快速找到不同的地方。
-W选择可以指定输出列的宽度,这里指定输出列宽为130

3、上下文输出格式
[root@localhost diff]# diff hello.c hello_diff.c -c                           //-c  显示全部内文,并标出不同之处。
*** hello.c     2007-09-25 17:54:51.000000000 +0800
--- hello_diff.c        2007-09-25 17:56:00.000000000 +0800
***************
*** 1,11 ****
  #include <stdio.h>
 
  int main(void)
  {
!       char msg[] = "Hello world!";
 
        puts(msg);
!       printf("Welcome to use diff commond.\n");
 
        return 0;
  }
--- 1,12 ----
  #include <stdio.h>
+ #include <stdlib.h>
 
  int main(void)
  {
!       char msg[] = "Hello world,fome hello_diff.c";
 
        puts(msg);
!       printf("hello_diff.c says,'Here you are,using diff.'\n");
 
        return 0;
  }
[root@localhost diff]#
这种方式在开头两行作了比较文件的说明,这里有三中特殊字符:
+        比较的文件的后者比前着多一行
-        比较的文件的后者比前着少一行       
!        比较的文件两者有差别的行

4、统一输出格式
[root@localhost diff]# diff hello.c hello_diff.c -u                                           //-u,-U<列数>或--unified=<列数>  以合并的方式来显示文件内容的不同。
--- hello.c     2007-09-25 17:54:51.000000000 +0800
+++ hello_diff.c        2007-09-25 17:56:00.000000000 +0800
@@ -1,11 +1,12 @@
 #include <stdio.h>
+#include <stdlib.h>
 
 int main(void)
 {
-       char msg[] = "Hello world!";
+       char msg[] = "Hello world,fome hello_diff.c";
 
        puts(msg);
-       printf("Welcome to use diff commond.\n");
+       printf("hello_diff.c says,'Here you are,using diff.'\n");
 
        return 0;
 }
[root@localhost diff]#
正如看到的那样,统一格式的输出更加紧凑,所以更易于理解,更易于修改。

5、其他
假如你想查看两个文件是否不同又不想显示差异之处的话,可以加上-q选项://-q或--brief  仅显示有无差异,不显示详细的信息。
[root@localhost diff]# diff hello.c hello_diff.c -q
Files hello.c and hello_diff.c differ
[root@localhost diff]# 另外你还可以提供一些匹配规则来忽略某中差别,可以用 -I regexp

[root@localhost diff]# diff hello.c hello_diff.c -c -I include
*** hello.c     2007-09-25 17:54:51.000000000 +0800
--- hello_diff.c        2007-09-25 17:56:00.000000000 +0800
***************
*** 2,11 ****
 
  int main(void)
  {
!       char msg[] = "Hello world!";
 
        puts(msg);
!       printf("Welcome to use diff commond.\n");
 
        return 0;
  }
--- 3,12 ----
 
  int main(void)
  {
!       char msg[] = "Hello world,fome hello_diff.c";
 
        puts(msg);
!       printf("hello_diff.c says,'Here you are,using diff.'\n");
 
        return 0;
  }
[root@localhost diff]#

这里通过“ -I include”选项来忽略带有“ include”字样的行
若要了解diff 各个选项的含义,请参考http://www.isstudy.com/linux/387.html
这才是真正的简洁,不用把一些无关紧要的东西加入进来,不要把自己当作字典一样进行储存;
觉得这样才是学命令的方法;
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
diff命令的参数详解和实例
gcc编译过程
史上最高效编程学习方法,十分钟学会使用C语言函数
世界上最经典的程序Hello World
gcc编译的四阶段 | 素包子
system()函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服