在二进制分隔符上拆分二进制文件?

aus*_*ous 1 unix binary bash shell grep

我正在研究一个shell脚本,将MPO立体3D图像转换为标准JPEG图像.MPO文件只是两个JPEG图像,连接在一起.

因此,您可以通过查找第二个JPEG幻数标题(0xFFD8FFE1)的字节偏移量来拆分JPEG文件.我已经使用hexdump/xxd,grep,head和tail手动完成了这个操作.

这里的问题是grep:我可以使用什么来直接搜索二进制文件以获取特定的幻数,并获得一个字节偏移量?或者我不应该使用shell脚本吗?谢谢.

Bar*_*Sas 7

您可以使用bbe(http://bbe-.sourceforge.net/)执行此操作,这是一个类似二进制文件的程序:

为了提取第一个JPEG使用:

bbe -b '/\xFF\xD8\xFF\xE1/:' -e 'D 2' -o first_jpeg mpo_file
Run Code Online (Sandbox Code Playgroud)

而对于第二个:

bbe -b '/\xFF\xD8\xFF\xE1/:' -e 'D 1' -o second_jpeg mpo_file
Run Code Online (Sandbox Code Playgroud)

请注意,如果JPEG的幻数出现在MPO文件中的其他位置,则此操作无效.