
クライアントのアプリをデバッグしているときに、DB から解決策になりそうな情報を見つけました。クライアントにその情報を抽出するように依頼しましたが、残念ながらクライアントは 16 進数で生データを送信してきました...
クライアントに DB ツールからのプレーンテキストを再送信するように依頼していますが、返答を待っている間に bash ソリューションを探しています。
エンコードされたデータは UTF-8 でエンコードされた文字列であることはわかっています。Unix ツールを使用してデコードする方法はありますか?
答え1
付きxxd
(通常は同梱vim
)
$ echo 5374c3a97068616e650a | xxd -p -r
Stéphane
ロケールの文字セット ( の出力を参照locale charmap
) が UTF-8 ではない (ただし、エンコードされた文字列内のすべての文字を表すことができる) 場合は、 を追加します| iconv -f UTF-8
。
すべての文字を表現できない場合は、 | iconv -f UTF-8 -t //TRANSLIT
近似値を取得してみてください。
答え2
Perl はカウントされますか?
$ echo "68656c6c6f0a" | \
perl -ne 'tr/a-fA-F0-9//cd; print pack("H*", $_)'
hello
そうでない場合は、おそらくこれができるでしょう:
$ echo "68656c6c6f0a" | sed -Ee 's/[0-9a-fA-F]{2}/\\\\x&/g' | xargs printf
hello
にはリテラルのバックスラッシュが必要ですprintf
が、これはどちらに対しても特別なのでxargs
、sed
2 回重ねる必要があります。( \\\\x
-> \\x
-> \x
)