diff用于比较文件或目录内容,特别是比较两个版本不同的文件以找到改动的地方。

如果指定比较的是文件,则只有当输入为文本文件时才有效,以逐行的方式,比较文本文件的异同处。

如果指定比较的是目录的的时候,diff命令会比较两个目录下名字相同的文本文件,列出不同的二进制文件、公共子目录和只在一个目录出现的文件。

基本命令参数:

-a   所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件.

-b   忽略空格引起的变化.

-B   忽略插入删除空行引起的变化.

-c   输出数字(默认为3行) 复制上下文.

-e   输出一个ed脚本.

-n   输出一个RCS格式diff

-q   仅报告文件是否相异,不在乎差别的细节.

-s   报告两个文件相同.

-r   比较子目录中的文件。

-v   显示版本信息

-y   以并列的方式显示文件的异同之处。

-i   不检查大小写的不同。

-H   比较大文件时,可加快速度。

-u   以合并的方式来显示文件内容的不同。

-w   忽略全部的空格字符。

...  ...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

实例:

两个文件:

程序清单1:log2013.c

2013-01

2013-02

2013-03

2013-04

2013-05

2013-06

2013-07

2013-08

2013-09

2013-10

程序清单2:log2014.c

2013-01

2013-02

2014-03

2013-04

2013-05

2013-06

2013-07

2013-07

2013-09

2013-10

2013-11

2013-12

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

我们使用diff命令来查看这两个文件的不同之处,有以下几种方便的方法:

① 普通格式输出:

[root@localhost diff]# diff log2013.c log2014.c

3c3

< 2013-03

---

> 2014-03

8c8

< 2013-08

---

> 2013-07

10a11,12

> 2013-11

> 2013-12

[root@localhost diff]# diff log2014.c log2013.c
3c3

< 2014-03

---

> 2013-03

8c8

< 2013-07

---

> 2013-08

11,12d10

< 2013-11

< 2013-12
说明:

“3c3”和“8c8”表示log2014.c和log2013.c文件在第3行和第8行内容有所不同;

“11,12d10”表示第一个文件比第二个文件多了第11和12行。

diff的normal 显示格式有三种提示:

a - add

c - change

d - delete

② 并排格式输出
[root@localhost diff]# diff log2013.c log2014.c -y -W 50
2013-01      2013-01

2013-02      2013-02

2013-03    | 2014-03

2013-04      2013-04

2013-05      2013-05

2013-06      2013-06

2013-07      2013-07

2013-08    | 2013-07

2013-09      2013-09

2013-10      2013-10

> 2013-11

> 2013-12

[root@localhost diff]# diff log2014.c log2013.c -y -W 50

2013-01      2013-01

2013-02      2013-02

2014-03    | 2013-03

2013-04      2013-04

2013-05      2013-05

2013-06      2013-06

2013-07      2013-07

2013-07    | 2013-08

2013-09      2013-09

2013-10      2013-10

2013-11   <

2013-12   <

说明:

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

“|”表示前后2个文件内容有不同

“<”表示后面文件比前面文件少了1行内容

“>”表示后面文件比前面文件多了1行内容

③ 上下文输出格式
[root@localhost diff]# diff log2013.c log2014.c -c
*** log2013.c2015-08-03 04:40:06.046896412 -0400

--- log2014.c2015-08-03 04:42:30.241574972 -0400

***************

*** 1,10 ****

2013-01

2013-02

! 2013-03

2013-04

2013-05

2013-06

2013-07

! 2013-08

2013-09

2013-10

--- 1,12 ----

2013-01

2013-02

! 2014-03

2013-04

2013-05

2013-06

2013-07

! 2013-07

2013-09

2013-10

+ 2013-11

+ 2013-12

说明:

这种方式在开头两行作了比较文件的说明,这里有三中特殊字符:
+ 比较的文件的后者比前者多一行
- 比较的文件的后者比前者少一行
! 比较的文件两者有差别的行

④ 统一输出格式
[root@localhost diff]# diff log2014.c log2013.c -u
--- log2014.c2015-08-03 04:42:30.241574972 -0400

+++ log2013.c2015-08-03 04:40:06.046896412 -0400

@@ -1,12 +1,10 @@

2013-01

2013-02

-2014-03

+2013-03

2013-04

2013-05

2013-06

2013-07

-2013-07

+2013-08

2013-09

2013-10

-2013-11

-2013-12

说明:

正如看到的那样,统一格式的输出更加紧凑,所以更易于理解,更易于修改。

它的第一部分,也是文件的基本信息:

--- log2014.c2015-08-03 04:42:30.241574972 -0400

+++ log2013.c2015-08-03 04:40:06.046896412 -0400

“---”表示变动前的文件,

“+++”表示变动后的文件。

第二部分,变动的位置用两个@作为起首和结束。

@@ -1,12 +1,10 @@

前面的"-1,12"分成三个部分:减号表示第一个文件(即log2014.c),"1"表示第1行,"12"表示连续12行。

合在一起,就表示下面是第一个文件从第1行开始的连续12行。

同样的,"+1,10"表示变动后,成为第二个文件从第1行开始的连续10行。

⑤ 其他

假如你想查看两个文件是否不同又不想显示差异之处的话,可以加上-q选项:
[root@localhost diff]# diff log2013.c log2014.c -q
Files log2013.c and log2014.c differ

另外你还可以提供一些匹配规则来忽略某中差别,可以用 -I regexp
[root@localhost diff]# diff log2013.c log2014.c -c -I include
*** log2013.c2015-08-03 04:40:06.046896412 -0400

--- log2014.c2015-08-03 04:42:30.241574972 -0400

***************

*** 1,10 ****

2013-01

2013-02

! 2013-03

2013-04

2013-05

2013-06

2013-07

! 2013-08

2013-09

2013-10

--- 1,12 ----

2013-01

2013-02

! 2014-03

2013-04

2013-05

2013-06

2013-07

! 2013-07

2013-09

2013-10

+ 2013-11

+ 2013-12

这里通过“ -I include”选项来忽略带有“ include”字样的行

linux文件对比命令——diff的更多相关文章

  1. 修改linux文件权限命令:chmod 【转载】

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. chmod  命令可以改变所有子目录的权限,下面有2种方法 改变一个文件的权限: chmod ...

  2. Linux文件系统管理命令(第二版)

    Linux文件系统管理命令 常用命令 1.df命令 查看分区使用情况 常用选项 -h 比较人性化 -m 以兆字节显示分区使用情况 显示信息: Mounted on:挂载点 Filesystem:对应的 ...

  3. Linux系统运维笔记(二),Linux文件编辑命令

    Linux系统运维笔记 Linux文件编辑命令 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容. 然后按ESC重新进入到命令 ...

  4. 修改linux文件权限命令

    修改linux文件权限命令:chmod Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文 ...

  5. Linux文件查找命令find,xargs详述【转】

    转自:http://blog.csdn.net/cxylaf/article/details/4069595 转自http://www.linuxsir.org/main/?q=node/137 Li ...

  6. linux 文件类命令笔记

    看一下linux的教程,不错,由于只看鸟哥有点空洞,于就是找了个视频教程,边看边学 对比了几个教程,http://edu.51cto.com/course/course_id-32.html这个教程相 ...

  7. Linux系列教程(六)——Linux文件搜索命令

    前一篇博客我们讲解了Linux链接命令和权限管理命令, 通过 ln -s  链接名 表示创建软链接,不加-s表示创建硬链接:还有三个更改权限的命令,chmod命令可以更改文件或目录权限,chown命令 ...

  8. Linux文件搜索命令

    文件搜索命令:locate locate 文件名 在后台数据库中按文件名搜索,搜索速度很快(比find命令要快得多) locate命令所搜索的后台数据库的位置:/var/bin/mlocate 支持模 ...

  9. Linux文件挂载命令mount

    在linux系统中硬盘.u盘.光驱等其他设备都需要挂载后才能正常使用.下面是对挂载命令mount使用方法的一些总结. 文件挂载命令mountmount [-t 文件系统类型][-L卷标名][-o特殊选 ...

随机推荐

  1. [LeetCode] Unique Paths II 不同的路径之二

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  2. css一些进入条

    http://www.jq22.com/jquery-info5309 http://www.jq22.com/jquery-info10964 http://www.jq22.com/jquery- ...

  3. 【转】fatal error C1900: “P1”(第“20081201”版)和“P2”(第“20080116”版)之间 Il 不匹配

    转自:这里(然而这里并没有写原出处) 背景:今天傻逼逼地想用vs2010来编译一个vs2013的项目,其中这个项目用到了一个库(应该是用2013编译的) 在我浅薄的认知中,以为只是13支持的特性更多, ...

  4. 如何设置Oracle客户端与服务器的字符集一致

    查看 Oracle 服务器字符集 select userenv('language') from dual; 设置Oracle客户端字符集 添加环境变量NLS_LANG 值与服务器的Oracle服务器 ...

  5. python基础补漏-01

    python对象的方法 1.python的特性:一切皆对象 2 type(obj) 查看对象的类型 3 dir(obj)查看类中所有详细的功能 4 help(obj) 查看类中所有详细的功能 类中的方 ...

  6. hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images, 本例子主要是使用HTML5 的File API,建立一個可存取到该file的url, 一个空的img标签,ID为img0,把 ...

  7. 【poj3071】 Football

    http://poj.org/problem?id=3071 (题目链接) 题意 ${2^n}$个队伍打淘汰赛,输的被淘汰.第1个队打第2个队,第3个队打第4个队······给出第i个队伍打赢第j个队 ...

  8. 7 HTML&JS等前端知识系列之jquery的事件绑定

    preface 我们知道,每一个a,input等等标签都可以为其绑定一个事件,onclick也好,focus 也罢,都可以绑定的.但是众神key想过这个问题没有,倘若这里有1000个input标签需要 ...

  9. 解决virtualbox装ghost xp装驱动时报portcls.sys蓝屏的问题

    原因:portcls.sys是声卡驱动文件,驱动与模拟的声卡型号不匹配. 解决办法:进入PE,把C:\sysprep\audio目录删除.进入系统后用驱动精灵装驱动.

  10. MVC POST在ACTION上进行多个模型的数据绑定

    首先声明,接下来的东西并不符合本人认同的严谨的MVC模式. 用MVC做项目的过程中,越来越多的用到不严谨的MVC编程. 比如,在"cshtml"文件中写: @Html.Raw(DB ...