• 每天一个Linux命令(31)diff命令


        diff命令在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。

        (1)用法:

        用法:  diff  [选项参数]  [文件1或目录1] [文件2或目录2]

        (2)功能:

        功能:  diff命令能比较单个文件或者目录内容。如果指定比较的是文件,则只有当输入为文本文件时才有效。以逐行的方式,比较文本文件的异同处。如果指定比较的是目录的的时候,diff 命令会比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。

        (3)选项参数:

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

          2) -W --width                在使用-y参数时,指定栏宽。

          3) -c                    显示全部内文,并标出不同之处。

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

          5) -r --recursive              比较子目录中的文件

          6) -n --rcs                 将比较结果以RCS的格式来显示。

        (4)实例:

          1)[root@localhost Document]# diff t1.txt t2.txt        比较两个文档的区别

    [root@localhost Document]# cat >t1.txt <<EOF   //第一种新建文档的方式
    > this is a text!
    > 
    > Name is t1.txt!
    > The extra content!
    > I am MenAngel!
    > EOF
    [root@localhost Document]# cat >t2.txt        //第二种新建文档的方式
    this is a text!
    
    Name is t2.txt!
    ^Z
    [2]+  已停止               cat > t2.txt       //按ctrl+z键停止
    [root@localhost Document]# diff ../Document/t1.txt ../Document/t2.txt    diff后的两个文件参数可以跟相对路径也可以跟绝对路径
    3,5c3                                  
    < Name is t1.txt!
    < The extra content!
    < I am MenAngel!
    ---
    > Name is t2.txt!
    [root@localhost Document]# diff t1.txt t2.txt
    3,5c3
    < Name is t1.txt!
    < The extra content!
    < I am MenAngel!
    ---
    > Name is t2.txt!

          第一个3表示两个文档第3行不同,第二个5c3表示第一个文档有5行,而第2个文档有三行。

          2)[root@localhost Document]# diff -y t1.txt t2.txt        以并排显示比较两个文档的区别

    [root@localhost Document]# diff -y t1.txt t2.txt
    this is a text!                            this is a text!
    
    Name is t1.txt!                              |    Name is t2.txt!
    The extra content!                          <
    I am MenAngel!                              <

          3)[root@localhost Document]# diff -y -W 40 t1.txt t2.txt    在(2)的基础上自定义显示的宽度

    [root@localhost Document]# diff -y -W 40 t1.txt t2.txt
    this is a text!        this is a text!
    
    Name is t1.txt!       |    Name is t2.txt!
    The extra conten   <
    I am MenAngel!     <

          4)[root@localhost Document]# diff -y -W 40 t1.txt t2.txt 或者 t2.txt t1.txt    文档顺序对结果的影响

    [root@localhost Document]# diff -y -W 40 t1.txt t2.txt
    this is a text!        this is a text!
    
    Name is t1.txt!       |    Name is t2.txt!
    The extra conten   <
    I am MenAngel!       <
    [root@localhost Document]# diff -y -W 40 t2.txt t1.txt
    this is a text!        this is a text!
    
    Name is t2.txt!       |    Name is t1.txt!
               >    The extra conten
               >    I am MenAngel!

      说明:

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

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

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

          5)[root@localhost Document]# diff -c t1.txt t2.txt            将进行比较的两个文档的内容全部显示出来标明行数,标出不同点

    [root@localhost Document]# diff -c t1.txt t2.txt
    *** t1.txt    2016-05-27 23:31:25.949100752 -0700
    --- t2.txt    2016-05-27 23:31:54.287100555 -0700
    ***************
    *** 1,5 ****           //从1到5行
      this is a text!
      
    ! Name is t1.txt!     //第3.4.5行不同
    ! The extra content!  //由于t2.txt没有第4和第5行,所以第4和第5行表明是比t2.txt多的
    ! I am MenAngel!
    --- 1,3 ----          //从1到3行
      this is a text!
      
    ! Name is t2.txt!     //第三行不同 

      说明:

      这种方式在开头两行作了比较文件的说明,这里有三中特殊字符:

        (“+” 比较的文件的后者比前着多一行

        “-” 比较的文件的后者比前着少一行)  //-u参数用的

        “!” 比较的文件两者有差别的行

          6)[root@localhost Document]# diff -u t1.txt t2.txt        以合并的方式显示文本的不同      

    [root@localhost Document]# diff -u t1.txt t2.txt                        //它的第一部分,也是文件的基本信息
    --- t1.txt    2016-05-27 23:31:25.949100752 -0700                       //-号表示第一个文件
    +++ t2.txt    2016-05-27 23:31:54.287100555 -0700                       //+号表示第二个文件
    @@ -1,5 +1,3 @@
     this is a text!
     
    -Name is t1.txt!
    -The extra content!
    -I am MenAngel!
    +Name is t2.txt!                                                  //每个减号对应一个加号,如果没有对应则表明在另一个文件中没有此行

          7)[root@localhost Document]# diff dir1 dir2            比较两个目录

    [root@localhost Document]# mkdir dir1 dir2                                 //创建两个目录
    [root@localhost Document]# cd dir1
    [root@localhost dir1]# cat >text1 <<EOF                                    //在dir1中创建text1,text2在dir2中创建text1,text3
    > dir:      dir1
    > name:     text1
    > 
    > Total 4!
    > EOF
    [root@localhost dir1]# cat >text2 <<EOF
    > I am MenAngel!
    > I am studying the order of Linux!
    > EOF
    [root@localhost dir1]# cd ../dir2
    [root@localhost dir2]# cat >text1 <<EOF
    > dir:      dir2
    > name:     text1
    > 
    > 
    > Total 5!
    > EOF
    [root@localhost dir2]# cat >text3 <<EOF
    > Working hard makes success!
    > I am MenAngel!
    > EOF
    [root@localhost dir2]# cd ../
    [root@localhost Document]# diff dir1 dir2
    只在 dir2 存在:text3
    diff dir1/text1 dir2/text1       //遇到同名文件自动比较
    1c1
    < dir:      dir1
    ---
    > dir:      dir2
    4c4,5
    < Total 4!
    ---
    > 
    > Total 5!
    只在 dir1 存在:text2

          8)[root@localhost Document]# diff dir1 dir2 >dir.log      产生补丁,其实就是把原本要输出到标准输出的内容输出到自定义文件中

    [root@localhost Document]# diff dir1 dir2 >dir.log
    [root@localhost Document]# cat dir.log
    只在 dir2 存在:text
    diff dir1/text1 dir2/text1
    1c1
    < dir:      dir1
    ---
    > dir:      dir2
    4c4,5
    < Total 4!
    ---
    > 
    > Total 5!
    只在 dir1 存在:text2

          9)[root@localhost Document]# diff t1.txt t2.txt>t12.log        产生补丁,并用此补丁更新文件

    [root@localhost Document]# cat t1.txt t2.txt
    this is a text!
    
    Name is t1.txt!
    The extra content!
    I am MenAngel!      //到这是t1.txt的内容
    this is a text!
    
    Name is t2.txt!    //到这是t2.txt的内容
    [root@localhost Document]# diff t1.txt t2.txt>t12.log       //产生补丁
    [root@localhost Document]# patch t1.txt t12.log             //给t1.txt打补丁,让它的内容变为t2.txt的内容
    patching file t1.txt
    [root@localhost Document]# cat t1.txt
    this is a text!
    
    Name is t2.txt!
    [root@localhost Document]# patch t2.txt t12.log             //给t2.txt打补丁,不过好像有点差别
    patching file t2.txt
    Reversed (or previously applied) patch detected!  Assume -R? [n] y    //还不知道是为什么?
    [root@localhost Document]# cat t2.txt
    this is a text!
    
    Name is t1.txt!
    The extra content!
    I am MenAngel!

        (5)其他:

          扩展知识:

          diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。

  • 相关阅读:
    数码管模块
    iis报mmc检测错误解决办法
    图片显示加时间戳
    C#.Net上传文件大小限制设置
    DoNet 打包,能够自动生成数据库(可以执行某些exe,vbs文件)
    aspx模式窗口
    aspx页面不能及时更新数据
    aspx 页面提交造成页面样式混乱
    MSSQL中返回刚插入记录的ID
    修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
  • 原文地址:https://www.cnblogs.com/MenAngel/p/5537530.html
Copyright © 2020-2023  润新知