Linux SED 在文件中替换 HEX 而不是插入? \x2A
Posted
技术标签:
【中文标题】Linux SED 在文件中替换 HEX 而不是插入? \\x2A【英文标题】:Linux SED replace HEX in file instead of insert? \x2ALinux SED 在文件中替换 HEX 而不是插入? \x2A 【发布时间】:2021-05-23 21:17:08 【问题描述】:我有这些字节: 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'
似乎在工作:)
【问题讨论】:
【参考方案1】:\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
请记住\1
\2
等和&
在替换零件中也很特殊。阅读Escape a string for a sed replace pattern - 但您需要转义\xXX
序列而不是每个字符(或先将字符转换为实际字节,为什么要使用所有\xXX
序列?)。或者选择其他工具。
【讨论】:
现在我坚持使用 \x26。sed -e 's/\xDB/\x26/g'
此代码拒绝将 DB 替换为 26,但是当我运行 s/\xDB/\xFF
时它可以工作。有什么想法吗?
Remember that \1 \2 etc. and & are special in replacement part too
- 你呢?并阅读***.com/questions/407523/… - 是吗?以上是关于Linux SED 在文件中替换 HEX 而不是插入? \x2A的主要内容,如果未能解决你的问题,请参考以下文章