我的文件里面有多个jpegs。所以我想将它们分成单个jpeg。
简单的部分是找到开头:0xFF0xD8 0xFF0xE1
标记JPG和EXIF数据字段的开头,这在我的情况下总是在开头。
所以我找到了这个awk命令:
awk '/string/{n++}{print >"out" n ".txt" }' final.txt
拆分文件。当我将它与hex一起使用时,这不能正常工作:
awk '/0xFF0xD8 0xFF0xE1/{n++}{print >"out" n ".txt" }' final.txt
awk的文档说前面带有0x的所有字符串都用作十六进制但我看起来效果不好..
编辑:我发现这个:https://superuser.com/questions/174362/how-to-split-binary-file-based-on-pattern但它对我不起作用......它应该创建2个文件,但只创建一个文件,它只有11个字节大
答案 0 :(得分:1)
你确定awk能很好地处理二进制文件吗?我以为它会期待换行。
Perl可以在正则表达式中使用十六进制转义符(来自this answer的基本概念):
#!/usr/bin/perl
undef $/;
$_ = <>;
$n = 0;
for $content (split(/(?=\xFF\xD8\xFF\xE0)/)) {
open(OUT, ">out" . ++$n . ".txt");
print OUT $content;
close(OUT);
}
答案 1 :(得分:0)
perl如果可能是首选工具,但是awk可以很好地处理它:
awk '{print > "out" NR ".jpg"}' RS=$( printf '\xff\xd8\xff\xe0' )