bash – 对齐每行9个字节的十六进制文本文件

我想将文本文件的选定部分对齐每列9个字节.

例如,假设我的文本文件如下所示.

00 2f c6 b8 29 fd 02 37 11  00 9f 74 34 0b 60 72 38 20  00 9e 61 33 8e ab 8a c0 09 
00 fa f0 66 6d 0c 44 d6 24 00 a1 11 9d a2 13 a5 b3 83 

我希望生成的文件像

00 2f c6 b8 29 fd 02 37 11 
00 9f 74 34 0b 60 72 38 20 
00 9e 61 33 8e ab 8a c0 09 
00 fa f0 66 6d 0c 44 d6 24 
00 a1 11 9d a2 13 a5 b3 83 

最简单的方法是什么?是否可以使用sed或awk在bash中执行此操作?

或者更好的方法来构建问题将是我已经格式化我的输入序列,如下所示.

00 88 ec 40 bf 94 1d 63
f4 00 04 1c 4e 06 d0 2c
2e f9 00 90 03 51 d5 71
cc 86 79 00 24 6b 22 30
b6 66 0f 5f 00 c1 cd a5
c8 45 b9 88 85 00 c0 de
ae 47 d9 91 f9 d3 00 5b

这是每行8个字节.如果你在第1行仔细注意第一个字节是00.在第2行第二个字节是00而在第3行第三个字节是00.I想要对齐整个文件以便所有行从00.hope开始,这有帮助

最佳答案
无论一行上有多少字节,这都可以工作

sed ':a $!N;s/\n/ /;ta;s/\(\(\([[:xdigit:]]\)\{2\} *\)\{8\}\([[:xdigit:]]\)\{2\}\) */\1\n/g'

输入

$cat alignbyte
00 2f c6
b8 29 fd 02
37 11 00 9f 74 34 0b 60 72 38
20 00 9e 61 33 8e ab 8a c0 09
00 fa f0 66
6d 0c 44 d6 24
00 a1 11 9d a2 13 a5 b3 83

产量

$sed ':a $!N;s/\n/ /;ta;s/\(\(\([[:xdigit:]]\)\{2\} *\)\{8\}\([[:xdigit:]]\)\{2\}\) */\1\n/g' alignbyte
00 2f c6 b8 29 fd 02 37 11
00 9f 74 34 0b 60 72 38 20
00 9e 61 33 8e ab 8a c0 09
00 fa f0 66 6d 0c 44 d6 24
00 a1 11 9d a2 13 a5 b3 83

我只是注意到你的输入文件在每组9个字节之后似乎有两个空格,除了最后一组.如果这是一个拼写错误,并且所有9个字节的集合确实被两个空格分隔,那么得到你想要的命令就是这样:

sed 's/  /\n/g' file

转载注明原文:bash – 对齐每行9个字节的十六进制文本文件 - 代码日志