![hexdump:如何在十六进制模式下抑制偏移列](https://linux22.com/image/77849/hexdump%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9C%A8%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E6%A8%A1%E5%BC%8F%E4%B8%8B%E6%8A%91%E5%88%B6%E5%81%8F%E7%A7%BB%E5%88%97.png)
我想从二进制文件中获取 16 个字节,从第 5 个字节开始,不使用空格分隔字节或单词。
hexdump
会做我想要的,只是偏移列干扰了输出:
$ hexdump -s5 -n16 -xe '/1 "%01X"' binfile
od
任务也很好,甚至可以被告知抑制偏移列,尽管我不得不使用它sed
来消除间距:
$ od -An -tx1 -j5 -N16 | sed 's/ //g' binfile
我确信它可以在没有 的情况下工作sed
,但由于我od
在十六进制模式下遇到了许多与字节顺序(交换字节)相关的问题,这并不像看起来那么容易。例如,更改-tx1
为更高的值会交换字节并弄乱我想要的 128 位值。-tx1
很好,但不像hexdump
我还没有找到摆脱空格的方法尽管同时保持字节顺序不变。
答案1
该-x
选项指示 hexdump 显示偏移量,并且随后指定格式不会抑制该偏移量。摆脱该-x
选项。
$ hexdump -s5 -n16 -e '/1 "%01X"' <<<@abcdefghijklmnopqrstuvwxyz; echo
65666768696A6B6C6D6E6F7071727374
如果您想按照平台的字节序读取两字节值-x
(在 x86 和 ARM 等小字节序平台上交换两个字节),请%02X
使用%01X
.
1 ARM CPU 支持两种字节序,但几乎所有 Unix 系统都以小字节序模式使用它们。