在 hexdump 的输出中从 A 到 B 进行“Grep-ing”

在 hexdump 的输出中从 A 到 B 进行“Grep-ing”

情况是这样的:我必须在输出中找到hexdump字符串 A 和字符串 B 之间的字节。十六进制转储的结构类似于:

-random bytes
-A + useful bytes + B
-random bytes
-A + useful bytes + B
-random bytes

现在,问题是: - 是否可以 grep“从 A 到 B”?我在手册页或互联网上没有看到类似的内容。我知道我可以手动完成,但我需要编写脚本。 - 是否可以显示不带行号的十六进制转储输出?看起来很有道理,但我还没有找到方法。

谢谢!

编辑:我正在尝试从环回设备恢复 2 个已删除的 JPEG 图像,因此我无法显示所有输出(它非常长),但这是其中的一部分:

0010400 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01
0010410 00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a
[...]
0030f50 3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32
0030f60 e8 26 8f ff d9 00 00 00 00 00 00 00 00 00 00 00

标准规定 JPEG 文件以 0xff 0xd8 开头,以 0xff 0xd9 结尾,所以我想获取这两个字符串之间的所有信息(我认为这应该可行,但我还没有测试过)

答案1

如前所述,保留严格的二进制可能是一个更好的主意这里 bbe似乎是这项工作的工具。以下命令将 JPEG 写入零填充的数字文件。

bbe -s -b '/\xff\xd8/:/\xff\xd9/' -e 'w %05B.jpg' > /dev/null

答案2

未经测试的

awk '
  /ff d8/ || ($2 == "d8" && ff_prevline) {p = 1}
  p {print}
  /ff d9/ || ($2 == "d9" && ff_prevline) {p = 0}
  {ff_prevline = ($NF == "ff")}
'

答案3

一种方法是使用perl.它将仅输出ff 8d和之间的字节范围ff 9d,没有行号:

假设下一个数据为 的内容infile

0010400 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01
0010410 00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a
0030f50 3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32
0030f60 e8 26 8f ff d9 00 00 00 00 00 00 00 00 00 00 00

运行下一perl行:

perl -ne '
    if ( (my $start = m/ff\sd8/) .. (my $end = m/ff\sd9/) ) { 
        s/\S*\s//; 
        s/\A.*(?=ff\sd8)// if $start; 
        s/(?<=ff\sd9).*\Z// if $end; 
        print 
    }
' infile

这将给出以下输出:

ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01                                                                                                                                                                                              
00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a                                                                                                                                                                                              
3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32                                                                                                                                                                                              
e8 26 8f ff d9

相关内容