用HEX中的ASCII码替换控制字符

时间:2012-04-13 16:59:39

标签: shell replace

我正在解析一个可能包含控制字符的文件(ASCII 0-31)。现在我想用十六进制表示的ASCII代码替换每个控制字符。我想到的一个相当简单的例子:

$ echo -e "a\011b" | sed -e 's/\o11/\\x09/g'
a\x09b

这会将标签(\011)转换为\x09,因此a<tab>b变为a\x09b

显然我可以使用32 -e - 参数,但我认为这很糟糕。对此有一般的方法吗?

顺便说一句,如果\n仍为\n,则不会有问题。 <{1}}不是必需的。

1 个答案:

答案 0 :(得分:2)

我会使用Perl。请注意,tab实际上是9而不是8 - 如果你试图更改值,那么这是不正确的,但如果你只是编码,这应该可以解决问题:

echo -e "a\011b" | perl -lpe 's/[\0-\037\177]/sprintf "\\x%02x", ord $&/ge'