Shell 魔法想要:在管道中格式化 hexdump 的输出

gri*_*mig 5 shell formatting perl hexdump netcat

我正在调试通过 TCP 传输数据的程序的输出。出于调试目的,我用netcat和替换了接收程序hexdump

netcat -l -p 1234 | hexdump -C
Run Code Online (Sandbox Code Playgroud)

将所有数据输出为一个不错的十六进制转储,几乎就像我想要的那样。现在,数据以长度不是 16 倍数的固定块传输,导致输出中的行移位,这使得发现差异有点困难:

00000000  50 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |P...............|
00000010  00 50 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |.P..............|
00000020  00 00 50 00 00 00 00 00  00 00 00 00 00 00 00 00  |..P.............|
Run Code Online (Sandbox Code Playgroud)

如何重新格式化输出,以便在 17 个字节后开始新行?它应该是这样的:

50 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |P...............|
00                                                |.               |
50 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |P...............|
00                                                |.               |
50 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |P...............|
00                                                |.               |
Run Code Online (Sandbox Code Playgroud)

使用 hexdumps-n参数不起作用,因为它会在达到字节数后退出。(除非有一种方法可以保持 netcat 程序运行并将下一个字节无缝地传输到 hexdump 的新实例)。

如果我可以watch -d在输出上使用以突出显示行之间的变化,那就太好了。

Tim*_*bov 5

对于没有字符部分的 hexdump。

hexdump -e '16/1 "%0.2x " "\n" 1/1 "%0.2x " "\n"'