• shell学习(23)- diff和patch


    diff命令可以生成两个文件之间的差异对比。

    (1) 先创建下列用于演示的文件。
    文件 1:version1.txt

    this is the original text
    line2
    line3
    line4
    happy hacking !

    文件 2:version2.txt

    this is the original text
    line2
    line4
    happy hacking !
    GNU is not UNIX


    (2) 非一体化(nonunified)形式的diff输出(不使用-u选项)如下:
    $ diff version1.txt version2.txt
    3d2
    <line3
    6c5
    > GNU is not UNIX

    (3) 一体化形式的diff输出如下:
    $ diff -u version1.txt version2.txt
    --- version1.txt 2010-06-27 10:26:54.384884455 +0530
    +++ version2.txt 2010-06-27 10:27:28.782140889 +0530
    @@ -1,5 +1,5 @@
    this is the original text
    line2
    -line3
    line4
    happy hacking !
    -
    +GNU is not UNIX
    选项-u用于生成一体化输出。因为一体化输出的可读性更好,更易于看出两个文件之间的差异,所以人们往往更喜欢这种输出形式。
    在一体化diff输出中,以+起始的是新加入的行,以-起始的是被删除的行。


    (4) 修补文件可以通过将diff的输出重定向到一个文件来生成:
    $ diff -u version1.txt version2.txt > version.patch
    现在就可以用patch命令将变更应用于其中任意一个文件。当应用于version1.txt时,就可以得到version2.txt;而当应用于version2.txt时,就得到了version1.txt。

    (5) 用下列命令来进行修补:
    $ patch -p1 version1.txt < version.patch
    patching file version1.txt
    version1.txt的内容现在和version 2.txt一模一样了。


    (6) 下列命令可以撤销作出的变更:
    $ patch -p1 version1.txt < version.patch
    patching file version1.txt
    Reversed (or previously applied) patch detected! Assume -R? [n] y
    # 变更被撤销
    如上例所示,对已修补过的文件再修补将撤销作出的变更。如果使用patch命令的-R选项,则不会提示用户y/n。


    补充内容
    让我们再看一些diff的其他特性。
    生成目录的差异信息
    diff命令也能够以递归的形式处理目录。它会对目录中的所有内容生成差异对比。使用下
    面的命令:
    $ diff -Naur directory1 directory2
    该命令中出现的选项含义如下。

    •  -N:将缺失的文件视为空文件。
    • -a:将所有文件视为文本文件。
    •  -u:生成一体化输出。
    •  -r:递归遍历目录下的所有文件
  • 相关阅读:
    Python学习手册-24~27章
    80211MAC基础
    数据库简单操作
    Linux流量管理
    Docker 初识
    TLA+(待续...)
    计数器统计
    《数据挖掘导论》目录
    信用卡欺诈案例——机器学习实战
    从重采样到数据合成:如何处理机器学习中的不平衡分类问题?
  • 原文地址:https://www.cnblogs.com/kumufengchun/p/11418862.html
Copyright © 2020-2023  润新知