linux之文本比较工具

文本比较工具常见的有:

diff 以行为单位,常用在ASCII纯文本文件的比较上,常用于同一文件(软件)新旧版本之间的差异比较上

cmp 比较两个文件,以字节为单位,使用较少

这里主要介绍一下diff的用法和后续的patch 命令

[root @localhost ~]#mkdir -p /tmp/vitest   #创建目录
[root @localhost ~]#cd /tmp/vitest
[root @localhost vitest]#cp /etc/passwd passwd.old
[root @localhost vitest]#cat /etc/passwd | sed -e '4d' -e '6c no six line' > passwd.new

注意:sed 后面接超过两个以上的动作时,每一个动作前都要加上-e

现在来比较一下两个文件的区别,如何使用 diff

[root @localhost ~]#diff [-bBi] from-file to-file

参数解析:

-b   忽略一行当中有多个空白的差异,如 l Love 与  I         Love的差异

-B   忽略空白行的区别

-i   忽略大小写的差异

from-file 作为欲比较的文件,to-file作为基准文件,from-file额to-file可以与 - 替换,表示stanard input之意

现在来比较 passwd.old 和 passwd.new 的差异

[root @localhost vitest]#diff passwd.old passwd.new

linux之文本比较工具_第1张图片

解析:依次是,左边第4行被删除,基准是右边的第3行,注意这里的<表示左边的意思

                        左边第6行被替换成右边的第5行

                        右边 “>”第5行内容

新建的passwd.old和passwd.new之间是两个不同的版本,如果要软件升级怎么办?就是将旧的文件升级为新的文件,可以先比较新旧版本,再将区别文件制作成不定文件,再由补丁文件更新旧文件

[root @localhost vitest]#diff -Naur passwd.old passwd.new > passwd.patch
[root @localhost vitest]#cat passwd.patch

linux之文本比较工具_第2张图片

以行为单位,找到不一样的地方,新文件看到-会删除,看到+会增加。那如何将旧文件更新为新的内容呢,就是讲passwd.old文件更新为passwd.new文件

[root @localhost vitest]#patch -pN < patch.file  #更新
[root @localhost vitest]#patch -R -pN < patch.file  #还原

参数解析:

-p 后面的N表示取消第几层目录的意思

-R 表示还原,将新的文件还原成旧的文件

现在,将刚才制作的patch file用来更新就版本

[root @localhost vitest]#patch -p0 < passwd.patch
[root @localhost vitest]#ll passwd*

linux之文本比较工具_第3张图片

版本回退到原来的旧版本呢

linux之文本比较工具_第4张图片

关于这里为什么是 -p0,因为我们比较新旧版本的数据是在同一个目录下,因此不需要减去目录了



你可能感兴趣的:(Linux)