gpt4 book ai didi

regex - 解析内存转储(寻找更优雅的解决方案)

转载 作者:行者123 更新时间:2023-11-29 09:49:01 25 4
gpt4 key购买 nike

我正在尝试使用 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 部分交换每个字节的两位数字并删除空格。第 4 部分删除了其他行以及地址和 ascii 表示。最后一部分删除了连接线。

这会输出一个像这样的字符串:

01112131415161718190000000....

我想知道我可以做得更好。

最佳答案

这可能对你有用(GNU sed):

sed '/^0x\S\{4\}\(\( \S\S\)\{8\}\).*/{s//\1/;H};$!d;x;s/\n//g;s/ \(.\)\(.\)/\2\1/g' file

或(紧要关头):

sed -r '/^0x....(( ..){8}).*/{s//\1/;H};$!d;x;s/\n//g;s/ (.)(.)/\2\1/g' file

关于regex - 解析内存转储(寻找更优雅的解决方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12482102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com