2012-04-13 36 views
1

制御文字(ASCII 0-31)を含む可能性のあるファイルを解析しています。これらの制御文字のそれぞれをASCIIコードで16進表現に置き換えたいと思います。私は心の中に持っているもののかなり簡単な例:制御文字を16進数でASCIIコードに置き換えます。

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

これは\x09にタブ(\011)に変換し、そのa<tab>ba\x09bになります。

明らかに私は32 -eのパラメータを使うことができましたが、それは悪いと思います。これには一般的なアプローチがありますか?

\n\nの場合は問題ありません。 sedは必須ではありません。

+0

許容進エスケープはありますか? –

+0

@ IgnacioVazquez-Abramsいいえ、出力には\ x..12という表記が含まれていなければなりません – sjngm

答えて

2

私はPerlを使用します。なお、タブではなく、8実際に9されて - あなたが値を変更しようとしている場合、これは正しくないですが、あなただけエンコードしている場合、これはトリックを行う必要があります。

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

lol、右。 011は明らかに9です。私は自分の質問を修正しました。しかし、おそらく、これがジェネリックであることを望む重要な理由です) – sjngm

+0

上記は一般的なものです... –

関連する問題