1

我正在解析一个可能包含控制字符(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. sed不是必需的。

4

1 回答 1

2

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

echo -e "a\011b" | perl -lpe 's/[\0-\037\177]/sprintf "\\x%02x", ord $&/ge'
于 2012-04-13T17:07:05.593 回答