Linux SED 替换文件中的 HEX 而不是插入? \x2A
Linux SED replace HEX in file instead of insert? \x2A
我有这些字节:
E6 2A 1B EF 11 00 00 00 00 00 00 4E 43 DB E8
我需要用这些替换它们:
64 08 1A EF 11 00 00 00 00 00 DA D8 26 04
当我开始实验时,我注意到一件奇怪的事情。
sed -e 's/\xE6/\x64/g'
此代码将第一个 E6 替换为 64 ok
然而,当我尝试更改更多字节 (2A) 时导致问题。
sed -e 's/\xE6\x2A/\x64\x08/g'
据我所知,2A 插入了相同的代码。如何避免?我只需要将 2A 更改为 08。提前致谢:)
已更新
现在我坚持使用 \x26。 sed -e 's/\xDB/\x26/g'
此代码拒绝将 DB 替换为 26,但是当我 运行 s/\xDB/\xFF
时它起作用了。有任何想法吗?这样26有问题。我试过[\x26],这里没有帮助。
好的。 s/\xDB/\&/g'
似乎有效:)
\x2a
是 *
,这在正则表达式中是特殊的:
$ sed 's/a*/b/' <<<'aaa'
b
$ sed 's/a\x2a/b/' <<<'aaa'
b
您可以在正则表达式中使用 括号表达式 来取消字符的特殊属性,但我发现它不适用于我的 GNU sed 的所有字符:
$ sed 's/\xE6[\x2A]/OK/' <<<$'I am \xE6\x2A'
I am OK
$ sed 's/[\xE6][\x2A]/OK/' <<<$'I am \xE6\x2A'
I am �*
那是因为 \xE6]
可能是一些无效的 UTF 字符。记得使用 C 语言环境:
$ LC_ALL=C sed 's/[\xE6][\x2A]/OK/' <<<$'I am \xE6\x2A'
I am OK
记住 </code> <code>
等和 &
在替换零件方面也很特殊。阅读 Escape a string for a sed replace pattern - 但您需要转义 \xXX
序列而不是每个字符(或者首先将字符转换为实际字节,为什么要使用所有 \xXX
序列?)。或者选择其他工具。
我有这些字节:
E6 2A 1B EF 11 00 00 00 00 00 00 4E 43 DB E8
我需要用这些替换它们: 64 08 1A EF 11 00 00 00 00 00 DA D8 26 04
当我开始实验时,我注意到一件奇怪的事情。
sed -e 's/\xE6/\x64/g'
此代码将第一个 E6 替换为 64 ok
然而,当我尝试更改更多字节 (2A) 时导致问题。
sed -e 's/\xE6\x2A/\x64\x08/g'
据我所知,2A 插入了相同的代码。如何避免?我只需要将 2A 更改为 08。提前致谢:)
已更新
现在我坚持使用 \x26。 sed -e 's/\xDB/\x26/g'
此代码拒绝将 DB 替换为 26,但是当我 运行 s/\xDB/\xFF
时它起作用了。有任何想法吗?这样26有问题。我试过[\x26],这里没有帮助。
好的。 s/\xDB/\&/g'
似乎有效:)
\x2a
是 *
,这在正则表达式中是特殊的:
$ sed 's/a*/b/' <<<'aaa'
b
$ sed 's/a\x2a/b/' <<<'aaa'
b
您可以在正则表达式中使用 括号表达式 来取消字符的特殊属性,但我发现它不适用于我的 GNU sed 的所有字符:
$ sed 's/\xE6[\x2A]/OK/' <<<$'I am \xE6\x2A'
I am OK
$ sed 's/[\xE6][\x2A]/OK/' <<<$'I am \xE6\x2A'
I am �*
那是因为 \xE6]
可能是一些无效的 UTF 字符。记得使用 C 语言环境:
$ LC_ALL=C sed 's/[\xE6][\x2A]/OK/' <<<$'I am \xE6\x2A'
I am OK
记住 </code> <code>
等和 &
在替换零件方面也很特殊。阅读 Escape a string for a sed replace pattern - 但您需要转义 \xXX
序列而不是每个字符(或者首先将字符转换为实际字节,为什么要使用所有 \xXX
序列?)。或者选择其他工具。