在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,来自man cmp

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

答案2

您可以尝试vimdiff

vimdiff -b file1 file2

在此处输入图片描述

相关内容