介紹如何在 Linux 中使用 pr
、diff
、paste
與 column
指令,顯示與比較兩個相似檔案的內容差異。
兩個相似檔案
假設我們有 file1.txt
與 file2.txt
兩個內容很相似的檔案,想要比較其中的差異:
# 查看 file1.txt 檔案內容
cat file1.txt
acpi adduser.conf alsa alternatives anacrontab apache2 apg.conf apm apparmor
# 查看 file2.txt 檔案內容
cat file2.txt
acpi adduser alsa alternatives anacrontab apg.conf apm apparmor apparmor.d
如果只用 cat
輸出內容,很難一眼看出兩個檔案的差異在哪裡。
diff
指令
diff
是專門用來比較檔案差異的工具,搭配 -y
或 --side-by-side
參數可以將兩個檔案以左右並排的方式呈現,方便查看差異的地方:
# 左右並排,比較差異 diff -y file1.txt file2.txt
acpi acpi adduser.conf | adduser alsa alsa alternatives alternatives anacrontab anacrontab apache2 < apg.conf apg.conf apm apm apparmor apparmor > apparmor.d
在這個輸出中,大於(>
)與小於(<
)的符號代表新增與移除的行,而 |
符號則是代表有修改過的行。
如果感覺輸出的板面太寬或是太窄,可以使用 -W
或 --width
參數來調整版面寬度:
# 設定輸出版面寬度為 40 diff -W 40 -y file1.txt file2.txt
acpi acpi adduser.conf | adduser alsa alsa alternatives alternatives anacrontab anacrontab apache2 < apg.conf apg.conf apm apm apparmor apparmor > apparmor.d
sdiff
指令
sdiff
指令就相當於 diff
加上 -y
參數,也可以輸出左右並排的差異內容:
# 左右並排,比較差異
sdiff file1.txt file2.txt
acpi acpi adduser.conf | adduser alsa alsa alternatives alternatives anacrontab anacrontab apache2 < apg.conf apg.conf apm apm apparmor apparmor > apparmor.d
若要調整輸出版面寬度,則可使用 -w
或 --width
參數:
# 設定輸出版面寬度為 40 sdiff -w 40 file1.txt file2.txt
acpi acpi adduser.conf | adduser alsa alsa alternatives alternatives anacrontab anacrontab apache2 < apg.conf apg.conf apm apm apparmor apparmor > apparmor.d
colordiff
指令
colordiff
指令是 diff
的彩色版本,使用的方式跟 diff
相同:
# 彩色排版,左右並排,比較差異 colordiff -W 40 -y file1.txt file2.txt
vimdiff
與 gvimdiff
指令
若習慣使用 Vim 編輯器的人,可以使用 vimdiff
來查看兩個檔案的差異:
# 左右並排,比較差異
vimdiff file1.txt file2.txt
或是使用 GVim 附帶的 gvimdiff
也可以:
# 左右並排,比較差異
gvimdiff file1.txt file2.txt
paste
與 column
指令
如果只是要單純將兩個檔案的每一行串接在一起,合併輸出,可以使用 paste
指令,而為了使輸出的資料更容易閱讀,可以再搭配 column
將資料轉為對齊的表格:
# 合併 file1.txt 與 file2.txt,並以表格方式輸出 paste file1.txt file2.txt | column -t -s $'\t'
acpi acpi adduser.conf adduser alsa alsa alternatives alternatives anacrontab anacrontab apache2 apg.conf apg.conf apm apm apparmor apparmor apparmor.d