Shell 用十六进制ASCII码替换控制字符

Shell 用十六进制ASCII码替换控制字符,shell,replace,Shell,Replace,我正在分析一个可能包含控制字符(ASCII 0-31)的文件。现在我想用十六进制表示的ASCII码替换这些控制字符。我想到的一个相当简单的例子: $ echo -e "a\011b" | sed -e 's/\o11/\\x09/g' a\x09b 这将选项卡(\011)转换为\x09,因此ab变为a\x09b 显然,我可以使用32 -e>代码>参数,但我认为这很糟糕。有没有一种通用的方法 顺便说一句,如果\n仍然是\n,这不是问题sed不是必需的。我会使用Perl。请注意,tab实际上是9

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

$ echo -e "a\011b" | sed -e 's/\o11/\\x09/g'
a\x09b
这将选项卡(
\011
)转换为
\x09
,因此
ab
变为
a\x09b

显然,我可以使用32 <代码> -e>代码>参数,但我认为这很糟糕。有没有一种通用的方法


顺便说一句,如果
\n
仍然是
\n
,这不是问题<代码>sed不是必需的。

我会使用Perl。请注意,tab实际上是9,而不是8-如果您试图更改该值,则这是不正确的,但如果您只是编码,则应该这样做:

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

八进制转义是否可以接受?@IgnacioVazquez Abrams否,输出必须包含
\x..
注释LOL,对。011显然是9。我修正了我的问题。但是,也许这就是我希望这是通用的关键原因;)