zoukankan      html  css  js  c++  java
  • Linux命令 diff cmp patch

    diff: 以行为单位进行比对

    $ cat passwd | sed -e '4d' -e '6c no six line' > passwd.new

    1 $ cat -n passwd.new  
    2      1    root:x:0:0:root:/root:/bin/bash
    3      2    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    4      3    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    5      4    sync:x:4:65534:sync:/bin:/bin/sync
    6      5    no six line
    7      6    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

    $ diff passwd passwd.new
    4d3                                                                                # 左边第4行被删掉(d)了,基准是右边的第3行
    < sys:x:3:3:sys:/dev:/usr/sbin/nologin                           # 列出左边(<)文件中被删除的一行
    6c5                                                                                # 左边文件的第6行被替换为右边文件的第5行
    < games:x:5:60:games:/usr/games:/usr/sbin/nologin   # 左边文件第6行的内容
    ---
    > no six line                                                                   # 右边文件第5行的内容

    不要用diff 去比对两个完全不相干的文件,没意义。

    diff 也可以比对整个目录下的差异,

    cmp: 以字节为单位进行比对

    $ cmp passwd passwd.new
    passwd passwd.new 不同:第 120 字节,第 4 行  # 第一个发现的不同点在第4行第120字节处。

    cmp可以用来比对binary文件。

    patch: 该指令与diff 密不可分

    示例: 将旧文件(passwd)更新为新文件(passwd.new)

    1). 先制作补丁文件

    $ diff -Naur passwd passwd.new > passwd.patch

    2). 更新旧文件

    $ patch -pN < patch_file      <==更新

    $ patch -R -pN < patch_file <==还原

    $ patch -p0 < passwd.patch       # 更新

    $ patch -R -p0 < passwd.patch  # 还原

    使用'-p0'的原因,因为在比对新旧文件是在同一个目录下,因此不需要减去目录。如果是使用整体目录比对时,就得要依据建立patch文件所在目录来进行目录删减了。不懂??

  • 相关阅读:
    Qt样式表都有哪些属性可以设置
    Qt之获取子部件
    PyQt样式表设置QComboBox
    Qt中QSlider的样式表设置
    Timer
    Python线程二
    python3线程启动与停止
    PyQt+Html+Js
    pyqt实现滑动开关
    Devexpress TreeList 展开和折叠当前选中节点
  • 原文地址:https://www.cnblogs.com/yangxiaoling/p/10553367.html
Copyright © 2011-2022 走看看