用十六进制ASCII码代替控制字符
问题描述:
我正在解析一个可能包含控制字符(ASCII 0-31)的文件。现在我想用它们的十六进制表示形式的ASCII码替换每个控制字符。什么,我心里有一个很简单的例子:用十六进制ASCII码代替控制字符
$ echo -e "a\011b" | sed -e 's/\o11/\\x09/g'
a\x09b
这个转换的标签(\011
)到\x09
,所以a<tab>b
变得a\x09b
。
显然我可以使用32 -e
-参数,但我认为这很糟糕。有没有一个通用的方法呢?
顺便说一句,如果\n
仍然是\n
,这不是问题。 sed
不是必需的。
答
我会用Perl。请注意,标签实际上是9,而不是8 - 如果你想改变的值,那么这是不正确的,但如果你只是编码,这应该做的伎俩:
echo -e "a\011b" | perl -lpe 's/[\0-\037\177]/sprintf "\\x%02x", ord $&/ge'
+0
哈哈,对。 011显然是9.我解决了我的问题。但是,也许这就是为什么我希望这是通用的关键原因;) – sjngm 2012-04-13 17:10:12
+0
而上述是通用的... – 2012-04-13 17:43:20
是八进制转义接受吗? – 2012-04-13 17:06:57
@ IgnacioVazquez-Abrams不,输出必须包含'\ x..'符号 – sjngm 2012-04-13 17:08:57