8.4 文件的格式化与相关处理
8.4.2 diff - compare files line by line
[root@localhost tmp]# diff <变动前的文件> <变动后的文件>
[root@localhost tmp]# diff a b
[root@localhost tmp]# diff b a
4d3 #第一个文件的第四行需要删除,然后匹配到第二个文件的第3行
[root@localhost tmp]# diff a b
2c2,3 #将第一个文件的第2行,换成第二个文件的第2,3行
#注:本质上,diff,用于如何更改第一个文件使其与第二个文件相同。
[root@localhost tmp]# diff -c a b
*** a 2020-04-26 10:08:07.335362393 -0400 #from file说明
--- b 2020-04-26 10:07:56.492361507 -0400 #to file说明
*** 1,4 **** #from file的处理范围是1-4行
--- 1,6 ---- #to file的处理范围是1-6行
[root@localhost tmp]# diff -u a b
--- a 2020-04-26 10:08:07.335362393 -0400
+++ b 2020-04-26 10:07:56.492361507 -0400
[root@localhost tmp]# touch a/{aa,cc,dd}
[root@localhost tmp]# touch b/{aa,ee,dd,ff}
[root@localhost tmp]# diff a b
[root@localhost tmp]# diff b a
8.4.3 cmp
1.cmp - compare two files byte by byte
[dmtsai@study ~]$ cmp [-l] file1 file2
-l :将所有的不同点的字节处都列出来。因为 cmp 预设仅会输出第一个发现的不同点。
a b differ: byte 7, line 2 #默认只显示第一个不同
[root@localhost tmp]# cmp -l a b
[root@localhost tmp]# cmp -lb a b
8.4.4 patch - apply a diff file to an original
patch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。
patch 这个指令与 diff 可是有密不可分的关系!diff 可以用来分辨两个版本之间的差异,patch就是『将旧的档案升级成为新的档案』!就是『先比较先旧版本的差异,并将差异档制作成为补丁档,再由补丁档更新旧档案』即可。
[dmtsai@study ~]$ patch -pN < patch_file <==更新
[dmtsai@study ~]$ patch -R -pN < patch_file<==还原
[root@localhost tmp]# cat b
[root@localhost tmp]# diff -u a b >ab.patch #获取差异
[root@localhost tmp]# patch -p0 < ab.patch #更新旧文件a
[root@localhost tmp]# patch -R -p0 < ab.patch #还原旧文件a
8.5 总结
l 正规表示法就是处理字符串的方法,他是以行为单位来进行字符串的处理行为;正规表示法透过一些特殊符号的辅助,可以让使用者轻易的达到『搜寻/删除/取代』某特定字符串的处理程序;
l 只要工具程序支持正规表示法,那么该工具程序就可以用来作为正规表示法的字符串处理之用;常见的支持正规表示法的工具软件有: grep , vim 等等。
l 正规表示法与通配符是完全不一样的东西!通配符 (wildcard) 代表的是 bash 操作接口的一个功能, 但正规表示法则是一种字符串处理的表示方式!
l 文件的比对中,可利用 diff 及 cmp 进行比对,其中 diff 主要用在纯文本档案方面的新旧版本比对