Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5610087
  • 博文数量: 922
  • 博客积分: 19333
  • 博客等级: 上将
  • 技术积分: 11226
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 14:33
文章分类

全部博文(922)

文章存档

2023年(1)

2020年(2)

2019年(1)

2017年(1)

2016年(3)

2015年(10)

2014年(17)

2013年(49)

2012年(291)

2011年(266)

2010年(95)

2009年(54)

2008年(132)

分类: LINUX

2009-11-23 20:24:12

参考资料:

http://blog.csdn.net/zhanglei6645/archive/2007/10/16/1827728.aspx


diff [选项] file1 file2


【功能】

该命令的功能为逐行比较两个文本文件,列出其不同之处。它比comm命令完成更复杂的检查。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。


【举例】

设有这样两个文件:

程序清单1 :hello.c

#include


int main(void)

{

    char msg[] = "Hello world!";

    

    puts(msg);

    printf("Welcome to use diff commond.\n");

    

    return 0;    

}


程序清单2:hello_diff.c

#include

#include


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 hello.c hello_diff.c 

输入之后,输出如下:

1a2

> #include

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");

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


*查看这两个文件的不同之处,并排输出格式:

$diff hello.c hello_diff.c -y -W 130

输入之后,输出如下:

#include                                              #include

                                                              > #include


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;

}                                                               }

这里,并排格式的对比一目了然,可以快速找到不同的地方。-W选择可以指定输出列的宽度,这里指定输出列宽为130。


*查看这两个文件的不同之处,上下文格式输出:

$diff hello.c hello_diff.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

  

  int main(void)

  {

!       char msg[] = "Hello world!";

  

        puts(msg);

!       printf("Welcome to use diff commond.\n");

  

        return 0;

  }

--- 1,12 ----

  #include

+ #include

  

  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 hello.c hello_diff.c -u

输入之后,输出如下:

--- 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

+#include

 

 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;

 }

这里,统一格式的输出更加紧凑,所以更易于理解,更易于修改。


*查看两个文件是否不同又不想显示差异之处:

$diff hello.c hello_diff.c -q

输入之后,输出如下:

Files hello.c and hello_diff.c differ

这里,如果两个文件相同,那么不会输出任何信息。


*查看这两个文件的不同之处,忽略带有“ include”字样的行:

$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;

  }

这里,另外你还可以提供一些匹配规则来忽略某中差别,可以用 -I regexp(正则表达式).


【描述】

说明:该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用“- ”表示file1或fiie2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。

*参数

-b 忽略行尾的空格,而字符串中的一个或多个空格符都视为相等。

-c 采用上下文输出格式(提供三行上下文)。

-C n 采用上下文输出格式(提供n行上下文)。

-e 产生一个合法的ed脚本作为输出。

-r 当file1和file2是目录时,递归作用到各文件和目录上。 


*结果

例如: diff /usr/xu mine 

把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。

通常输出由下述形式的行组成:

n1 a n3,n4

n1,n2 d n3 

n1,n2 c n3,n4 

这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改操作。

在上述形式的每一行的后面跟随受到影响的若干行,以“<”打头的行属于第一个文件,以“>”打头的行属于第二个文件。

diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。 



【其它】

*diff和patch的使用:

1) diff/patch这对工具在数学上来说,diff是对2个集合求差,patch是求和

*生成A和B的diff文件C:

$diff A B > C

这里C相当于A到B的一个“补丁”文件,记录两者之间的差异。


* 给A打上diff文件得到B:

$patch A C

这里,如果用patch B C则会提示警告告诉你用反了。


*B还原为A:

$patch -R B C

这里,如果用patch -R A C则会提示警告告诉你用反了。


2) 内核补丁

 *生成

 $diff -uNr linux-2.6.xxx linux-2.6.xxx.1 > diff.patch

 *升级

 $cp diff.patch linux-2.6.xxx/.

 $cd linux-2.6.xxx

 $patch -p1 < diff.patch

阅读(936) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

vaqeteart2019-12-30 14:16:00

转至 orgmode