在bash中開啟檔案的某個位置並讀取一個位元組

在bash中開啟檔案的某個位置並讀取一個位元組

由於已經有兩個人投票結束這篇文章,我將盡力使問題盡可能清楚。實體設備上的檔案表示為二進位序列。話雖這麼說,我需要做的是檢查兩個檔案在這種層級的表示之間的差異(即我需要比較兩個不同檔案中同一位置上的多個位元組之間的差異),並輸出這些差異在bash腳本中。

例子:

file1: 00000000 01010101 10101010 11001100 00110011

file2: 00000000 01010101 01010101 00110011 00110011

此腳本應輸出:

differences: Byte 3 (file 1: 01010101; file2 10101010), Byte 4 (file1: 11001100; file 2: 00110011)

或類似的東西。

因此,為了實現這一目標,我需要做的第一件事是至少能夠在某個位置打開檔案並讀取一個位元組並輸出/儲存該位元組。我可以編寫一個C程式來做到這一點,但是有沒有辦法做到這一點bash

答案1

你可以試試cmp。它將逐字節比較兩個檔案。

man cmp:

cmp - compare two files byte by byte

儘管兩個檔案的行數必須相等。另請注意,cmp僅指向第一個差異,要指向下一個差異,您可以從頭開始跳過特定位元組。

$ cat foo 
this is
a test
$ cat bar
this
is a test
$ cmp foo bar 
foo bar differ: byte 5, line 1
$ cmp -b foo bar 
foo bar differ: byte 5, line 1 is  40    12 ^J

若要列印不同的位元組值,請使用cmp -l, from man cmp

   -l, --verbose
          output byte numbers and differing byte values

答案2

您可以嘗試使用vimdiff

vimdiff -b file1 file2

在此輸入影像描述

相關內容