0

我有一个里面有多个 jpeg 的文件。所以我想将它们拆分为单个 jpeg。

最简单的部分是找到开头:0xFF0xD8 0xFF0xE1标记 JPG 和 EXIF 数据字段的开头,在我的情况下,它总是在开头。

所以我找到了这个 awk 命令:

awk '/string/{n++}{print >"out" n ".txt" }' final.txt

拆分文件。当我将它与十六进制一起使用时,它不能按预期工作:

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 个字节大

4

2 回答 2

1

您确定 awk 可以很好地处理二进制文件吗?我以为它会期待换行符。

Perl 可以在正则表达式中使用十六进制转义(来自此答案的基本思想):

#!/usr/bin/perl
undef $/;
$_ = <>;
$n = 0;
for $content (split(/(?=\xFF\xD8\xFF\xE0)/)) {
        open(OUT, ">out" . ++$n . ".txt");
        print OUT $content;
        close(OUT);
}
于 2012-07-02T12:40:15.173 回答
0

perl 如果可能是首选工具,但 awk 可以很好地处理它:

awk '{print > "out" NR ".jpg"}' RS=$( printf '\xff\xd8\xff\xe0' )
于 2012-07-02T18:20:35.417 回答