• linux文件对比命令——diff


    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”字样的行

  • 相关阅读:
    容器网络(一)docker容器网络驱动
    双指针遍历/滑动窗口 —— 209_长度最小的子数组
    双指针遍历/滑动窗口 —— 121_买卖股票的最佳时机
    双指针遍历/滑动窗口 —— 42_接雨水
    双指针遍历/滑动窗口 —— 26_删除排序数组中的重复项
    双指针遍历/滑动窗口 —— 16_最接近的三数之和
    双指针遍历/滑动窗口 —— 15_三数之和
    双指针遍历/滑动窗口 —— 11_盛最多水的容器
    双指针遍历/滑动窗口 —— 3_无重复字符的最长子串
    链表操作 —— 206_反转链表
  • 原文地址:https://www.cnblogs.com/vurtne-lu/p/6253053.html
Copyright © 2020-2023  润新知