2012-04-13 106 views
1

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

+0

是八進制轉義接受嗎? – 2012-04-13 17:06:57

+0

@ IgnacioVazquez-Abrams不,輸出必須包含'\ x..'符號 – sjngm 2012-04-13 17:08:57

回答

2

我會用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

相關問題