URLに%エンコードされたUTF-8テキストを含むHTMLファイルがあります。
たとえば、「%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B」は、「ресурсы」(ロシア語で「リソース」)を意味します。
アクションは、これらのすべての部分文字列を読み取り可能なUTF-8テキストに置き換えることです。
%
作業を簡素化するために、ファイルに他のシンボルの使用がないことを考慮することができます。英数字は大文字でも小文字でもかまいません。
sed
私はこれが、または何かを使用してエレガントに行うことができると思いますperl
が、awk
方法はわかりません。
このWebアプリケーションそこに貼り付けたテキストを使うと効果があるようです。
答え1
一部のシステムでbash、zsh、GNU echo、またはkshを実装するには、echo -e
すべて%
を\x
。
url_encoded_string="%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B"
temp_string=${url_encoded_string//%/\\x}
printf '%s\n' "$temp_string"
# output: \xD1\x80\xD0\xB5\xD1\x81\xD1\x83\xD1\x80\xD1\x81\xD1\x8B
echo -e "$temp_string"
# output: ресурсы
(文字列自体にはバックスラッシュ文字は含まれておらず、コマンドecho
でサポートされているオプションの1つではないと仮定します。)
@JoshLeeも指摘したように、「エコー警告」を直接使用することで回避できます。
printf ${url_encoded_string//%/\\x}
最初の命令の直後ではありません。
答え2
パールの使用:
perl -pe 's/%([0-9A-F]{2})/pack"H2",$1/gei'
または以下を使用してURI::Escape
:
perl -MURI::Escape -pe '$_=uri_unescape$_'
答え3
助けることができるプログラムがありますconvmv
。
.itを使用すると、convmv --unescape /some_path/target_file
テスト実行が行われます。
ご確認の上、継続をご利用くださいconvmv --notest --unescape /some_path/target_file
。
プログラムのホームページは次のとおりです。http://j3e.de/linux/convmv/