我想要将二进制文件中的某些字节替换为其他字节。通过以下方式创建了一个示例文件(长度为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)
谢谢。
$
,它是一个正则表达式特殊字符(行锚定符),而序列\x42\x02
没有出现在行末。 - glenn jackmansed
并不适用于二进制替换。您将遇到多字节字符等问题。最好使用 bbe 来代替,这是一种类似于“sed
用于二进制文件”的工具。 - Philippos