如何用sed定位D[0x000]并替换后续指定位置的十六进制数字
问题描述
原始输入行:
quipkgkulul,qyyio (avuip),Llo,tyiop : D[0x000]: 0x00123400 0x00000000 0x00000000 0x00000000
需求:定位行中的D[0x000],对其冒号后的十六进制数做针对性替换,最终得到:
quipkgkulul,qyyio (avuip),Llo,tyiop : D[0x000]: 0x00xxx00 0x000xxx0 0x00000000 0x00000000
此前尝试的命令未达到预期:
sed -E 's/[^[][a-zA-Z0-9][^]]//g' file
解决方案
使用以下sed命令可以实现需求:
sed -E '/D\[0x000\]/ { s/(0x00)[0-9a-fA-F]{3}(00)/\1xxx\2/ s/(0x000)[0-9a-fA-F]{3}(0)/\1xxx\2/ }' file
命令解释
/D\[0x000\]/:仅对包含D[0x000]的行进行操作,避免误改其他行- 第一个替换规则:匹配第一个十六进制数的
0x00前缀和00后缀,将中间3个十六进制字符替换为xxx - 第二个替换规则:匹配第二个十六进制数的
0x000前缀和0后缀,将中间3个十六进制字符替换为xxx
执行后输出结果:
quipkgkulul,qyyio (avuip),Llo,tyiop : D[0x000]: 0x00xxx00 0x000xxx0 0x00000000 0x00000000
内容的提问来源于stack exchange,提问作者vidya
相关产品推荐
相关产品推荐

