![bashのHTMLページで特殊な16進文字を変換する方法は? [コピー]](https://linux33.com/image/74204/bash%E3%81%AEHTML%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A7%E7%89%B9%E6%AE%8A%E3%81%AA16%E9%80%B2%E6%96%87%E5%AD%97%E3%82%92%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
Webページの一部の情報を処理するスクリプトがあります。ページエンコーディングにより、一部の特殊文字が16進数でエンコードされているようです。たとえば、「/」に翻訳する必要がある文字列「%2f」があります。
bashでこれらの16進特殊文字をASCIIに変換するにはどうすればよいですか?どんなアイデアがありますか?
答え1
printf
Bashには、Cで学んだのとほぼ同じ組み込み機能があります。構文が若干異なります。
printf '\x2f'
より高いレベルのデータ整合性の問題を心配する必要がない場合は、次の関数を使用してURLを簡単に変換できます。
function deUrl() {
printf "${1//%/\\x}"
}
%
(すべてをaに変換し\x
てからprintfで印刷します。)
答え2
これらのエンティティは、次のPython one-linerを使用してデコードできます。
$ python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "%2f"
/
コードは単一文字に限定されません。より複雑な文字列を受け入れます。
$ python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "%2d and %2f"
- and /
Pythonのurllib.unquote
文書化ここ。