如何从文件中提取单个字节块?

在Linux桌面(RHEL4)上,我想从大文件(> 1 Gig)中提取一个范围的字节(通常小于1000)。 我知道文件的偏移量和块的大小。

我可以编写代码来做到这一点,但有没有一个命令行解决scheme?

理想情况下,如下所示:

magicprogram --offset 102567 --size 253 < input.binary > output.binary 

尝试dd

 dd skip=102567 count=253 if=input.binary of=output.binary bs=1 

这是一个古老的问题,但我想添加更适合于大块字节的dd命令的另一个版本:

 dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes 

$offset$bytes是以字节为单位的数字。

与托马斯接受的答案不同的是, bs=1在这里没有出现。 bs=1产生input和输出块的大小为1个字节,这使得当提取的字节数很大时非常慢。

dd命令可以完成所有这些。 作为调用的一部分,查看seek和/或skip参数。

head + tail

不知道它如何比较dd效率,但它很有趣:

 printf "123456789" | tail -c+2 | head -c3 

挑选3个字节,从第二个开始:

 234 

另请参阅: https : //stackoverflow.com/a/1272995/895245