bashスクリプトとsedを使用してs51シミュレーターの出力を解析しようとしています。最初のステップでは、16進形式のすべてのバイトを含む単一の文字列が必要です。シミュレータの出力は次のようになります。実際の出力ははるかに長く、最大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つの部分は、各バイトの2桁を交換し、スペースを削除します。4番目の部分は、他の行とアドレスおよびASCII表現を削除します。最後の部分は、線を接続する接続を削除します。
これにより、次のような文字列が出力されます。
01112131415161718190000000....
何がもっと上手くできるのだろうと思っていました。