bash で特定の位置のファイルを開き、1 バイトを読み取る

bash で特定の位置のファイルを開き、1 バイトを読み取る

すでに 2 人がこの投稿を閉じる投票をしているので、質問をできるだけ明確にします。物理デバイス上のファイルは、バイナリ シーケンスとして表されます。そうは言っても、私が行う必要があるのは、そのようなレベルで 2 つのファイルの表現の違いをチェックし (つまり、2 つの異なるファイル間で同じ位置にある複数のバイトの違いを比較する必要があります)、そのような違いをスクリプトで出力することです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)

あるいはこれに似たもの。

そのため、これを実現するために最初に必要なのは、少なくとも特定の位置でファイルを開き、1バイトを読み取り、そのバイトを出力/保存できるようにすることです。そのためCのプログラムを書くこともできますが、これを内部で行う方法はありますか?bash?

答え1

試すことができますcmp。2 つのファイルをバイトごとに比較します。

からman cmp:

cmp - compare two files byte by byte

ただし、2 つのファイルの行数は等しくなければなりません。また、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、 を使用しますman cmp:

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

答え2

以下を試すことができますvimdiff:

vimdiff -b file1 file2

ここに画像の説明を入力してください

関連情報