我正在解析一个可能包含控制字符的文件(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}}不是必需的。
答案 0 :(得分:2)
我会使用Perl。请注意,tab实际上是9而不是8 - 如果你试图更改值,那么这是不正确的,但如果你只是编码,这应该可以解决问题:
echo -e "a\011b" | perl -lpe 's/[\0-\037\177]/sprintf "\\x%02x", ord $&/ge'