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解析:依次是,左邊第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以行為單位,找到不一樣的地方,新文件看到-會刪除,看到+會增加。那如何將舊文件更新為新的內容呢,就是講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*版本回退到原來的舊版本呢
關于這里為什么是 -p0,因為我們比較新舊版本的數據是在同一個目錄下,因此不需要減去目錄了
總結
以上是生活随笔為你收集整理的linux之文本比较工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux之awk
- 下一篇: linux之变量的设置与显示