gpt4 book ai didi

replace - 为什么 sed 无法替换二进制文件中的 0x24 字节?

转载 作者:行者123 更新时间:2023-12-02 15:07:02 30 4
gpt4 key购买 nike

我想将二进制文件中的一些字节替换为另一个字节。通过创建示例(6 字节长)文件

echo -ne '\x8f\x15\x42\x02\x24\xc2' > test

然后尝试通过 sed 将字节 \x15\x42\x02 替换为 \x12\x12\x02:

sed 's \x15\x42\x02 \x12\x12\x02 g' test > test1

sed 替换的字节:

cat test test1 | xxd -c 6
0000000: 8f15 4202 24c2 ..B.$.
0000006: 8f12 1202 24c2 ....$.
^^ ^^^^

尝试将字节\x42\x02\x24替换为\x12\x02\x24:

sed 's \x42\x02\x24 \x12\x02\x24 g' test > test2

sed 未替换的字节:

cat test test2 | xxd -c 6
0000000: 8f15 4202 24c2 ..B.$.
0000006: 8f15 4202 24c2 ..B.$.
^^^^ ^^

怎么了?我有 sed (GNU sed) 4.2.2 (Kubuntu 13.10)

谢谢。

最佳答案

这是因为0x24$字符的十六进制代码。请注意,^$ 在正则表达式中具有特殊含义(sed 用于匹配),字面意思是“在行的开头” ,和“在行尾”,分别。因此,除非转义,否则这些字符将被忽略。因此,

回显“这个和那个”| sed 's/this$/cat/'

将使字符串保持不变,因为您告诉 sed 在行尾查找“this”——因为“that”位于行尾,因此不匹配。然而,

echo“花费 50.00 美元。” | sed 's/\$50\.00/47.00 瑞士法郎/'

将按预期更改行,因为 $ 已转义。对于二进制数据,只需在正则表达式部分的 \x24 之前包含 \ 字符 (\x5c) 的十六进制代码即可应该可以正常工作。

干杯。

关于replace - 为什么 sed 无法替换二进制文件中的 0x24 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909228/

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