我想解析使用bash脚本和sed的s51模拟器的输出。在第一步中,我想要一个包含所有十六进制字节的字符串。模拟器的输出如下所示。实际输出可能会更长,高达64k。解析内存转储(寻找更优雅的解决方案)
0x0000 10 11 12 13 14 15 16 17 ........
0x0008 18 19 00 00 00 00 00 00 ........
0x0010 00 00 00 00 00 00 00 00 ........
0x0018 00 00 00 00 00 00 00 00 ........
0x0020 00 00 00 00 00 00 00 00 ........
0x0028 00 00 00 00 00 00 00 00 ........
0x0030 00 00 00 00 00 00 00 00 ........
timer #0("time") ON: 0.001085 sec (13020 clks)
timer #0("isr") ON,ISR: 0 sec (0 clks)
timer #0("idle") ON,ISR: 0 sec (0 clks)
我的代码解析如下:
sed -e ':loop' -e 's/\s\([0-9a-f]\{1\}\)\([0-9a-f]\{1\}\)/\2\1/g' -e 't loop' -n -e 's/.*\(0x[0-9a-f]\{4\}\)\([0-9a-f]\{16\}\).*/\2/p' | sed -e ':a;N;$!ba;s/\n//g'
第一3份交换每个字节的两个数字和移除的空间。第四部分删除其他行和地址和ASCII表示。最后一部分删除连接线。
此输出一个字符串喜欢这样的:
01112131415161718190000000....
我想知道什么我可以做的更好。
是对电流输出COR直接,你只是想简化方法,或者你想获得不同的输出? –
当前输出正确。我只是想简化这个方法。 – mrks