我的问题的答案可能存在于 SO 上,但老实说,我已经努力寻找并找不到它。我得到的最接近的是这个问答,但我无法在我的机器上重现他们的结果(OSX 10.7.5,使用bash
)。
这是问题的本质:我无法将(例如for )sed
解释为十六进制字符。尤其让我抓狂的是:\xnn
\x41
A
echo -e '\x41'
结果A
- 所以操作系统及其功能理解我的十六进制代码......
echo -e '\x41' | sed 's/A/B/'
结果- 正如预期的那样,因为十六进制代码在看到它之前B
被转换为A
sed
但
echo A | sed 's/\x41/B/'
结果A
- 我本来期望的B
我尝试过类似的事情
echo A | LANG='C' sed 's/\x41/B/'
结果是A
echo A | LANG='' sed 's/\x41/B/'
同上...
echo A | sed 's/[\x41]/B/'
结果是A
但...
echo A | sed 's/[\x41-\x41]/B/'
结果B
???
我完全愚蠢吗?还是真的有什么奇怪的地方sed
?它显然可以解释一个范围内的十六进制代码,但我不能让它被解释为单个字符。我错过了什么?
请注意 - 我正在寻找既能解释上述行为为何如此的答案,也能在 OSX 平台上的字符串中的任何位置插入单个十六进制代码的方法。这意味着在“搜索”和命令的“替换”部分。因为我显然已经表明我可以使用 [\xnn-\xnn]; 搜索单个字符;这不是我要找的答案。sed
s/
提前致谢!