在命令行上实现类似 hexdump 的格式,包括二进制字符串?

sda*_*aau 7 linux command-line hexdump

我真的很喜欢hexdump,尤其是因为您可以定义自定义格式;说:

$ echo -e '\x00\x01\x02\x03' | hexdump -v -e '1/1 "%_ad: "' -e '4/1 "%02X "' -e '1/1 " : "' -e '4/1 "%_p"' -e '1/1 "\n"'
0: 00 01 02 03 : ....
4: 0A          : .
Run Code Online (Sandbox Code Playgroud)

所以,我可以选择每行 4 个字节,先写成十六进制,然后写成字符。但是,我在这里缺少的是“二进制字符串”(或“位字符串”)格式字符;例如,我想-e '4/1 "%08b "'在该命令行中的某处写一些类似的东西,然后得到,例如:

0: 00 01 02 03 : 00000000 00000001 00000010 00000011 : ....
4: 0A          : 00001010 : .
Run Code Online (Sandbox Code Playgroud)

当然,那么可能必须指定字节序(如果应该格式化多于一个字节的组)等等......但无论如何,就我在hexdump手册中看到的而言,这种格式不存在.

所以我的问题是 - 我在 Linux 命令行上有哪些替代方案,以便我可以获得包含上述二进制字符串的格式化转储,但最大程度地保留了hexdump程序的可定制性(在字节分组方面) ) 什么时候使用它的-e选项?

Gra*_*eme 5

通过两者一起失败的转储程序与适当的转储选项,你可以随时鹅卵石的东西hexdumpxdd,然后加入与粘贴的输出。它不漂亮,但使用支持进程替换的外壳(bash可以):

mkfifo fifo
echo -e '\x00\x01\x02\x03' |
  tee fifo |
  paste -d' ' \
    <(hexdump -v -e '1/1 "%_ad: "' -e '4/1 "%02X "' -e '1/1 " :\n"') \
    <(xxd -b -c 4 fifo | cut -d' ' -f 2-)
Run Code Online (Sandbox Code Playgroud)

输出:

0: 00 01 02 03 : 00000000 00000001 00000010 00000011  ....
4: 0A          : 00001010                             .
Run Code Online (Sandbox Code Playgroud)

  • 整洁的。谢谢。每天学习新知识都是美好的一天。根本没有想到“粘贴”。 (2认同)