如何用grep提取两位字符序列及处理otool输出的机器码
让我一步步帮你解决这两个问题:
1. 提取所有两位字符序列的grep命令
如果你需要按顺序提取文本中所有连续的两位字符序列,可以借助grep的-o选项(只输出匹配的片段)搭配扩展正则表达式实现:
# 匹配任意两位字符(包含字母、数字、符号等所有类型) grep -oE '.{2}' your_input_file
如果你的需求是仅提取两位十六进制字符序列(比如第二个问题里的机器码场景),可以把正则限定在十六进制字符范围内:
grep -oE '[0-9a-fA-F]{2}' your_input_file
简单解释下关键选项:
-o:让grep只输出匹配到的部分,而非整行内容-E:启用扩展正则,这样可以直接用{2}表示重复两次,不用额外转义.[2]:匹配任意两个连续字符;[0-9a-fA-F]{2}:精准匹配两位十六进制字符(大小写都支持)
2. 从otool输出提取机器码并添加\x前缀
针对你给出的otool输出格式,我们需要先过滤掉开头的地址(比如0000000000000000)和末尾的..,再提取所有十六进制字节,最后为每个字节添加\x前缀并整合成字符串。这里有一条简洁的命令链可以完成:
otool -t someFile | grep -oE '[0-9a-fA-F]{2}' | sed 's/^/\\x/' | tr -d '\n'
拆解下每个步骤的作用:
otool -t someFile:输出目标文件的文本段机器码grep -oE '[0-9a-fA-F]{2}':自动跳过地址和..,只提取所有符合格式的两位十六进制字节sed 's/^/\\x/':为每个十六进制字节的开头添加\x(这里用\\x是为了转义,避免sed把\x识别为特殊字符)tr -d '\n':删除所有换行符,把分散的带\x的字节拼接成一个连续的长字符串
用你给出的输出片段测试,最终会得到这样的结果:\x48\x31\xff\x40\xb7\x02\x48\x31\xf6\x40\xb6\x01\x48\x31\xd2\x48\xc8\x28\xb0\x3b\x52\x68\x2f\x2f\x62\x69\x0f\x05
如果需要把结果保存到文件,只需在命令末尾加上> output.txt即可。
内容的提问来源于stack exchange,提问作者some_id
相关产品推荐
相关产品推荐

