sed
次のコマンドラインを試してください:
$ sed 's@+@ @g;s@%@\\x@g' file | xargs -0 printf "%b"
または、次を使用する次の代替echo -e
:
$ sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' file | xargs echo -e
注:上記の構文は+
スペースに変換されない場合があり、すべての改行を使用できます。
エイリアスとして定義し、シェルのrcファイルに追加できます。
$ alias urldecode='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b"'
次に、必要なときはいつでも、次のようにします。
$ echo "http%3A%2F%2Fwww" | urldecode
http://www
バッシュ
スクリプトを作成するときは、次の構文を使用できます。
input="http%3A%2F%2Fwww"
decoded=$(printf '%b' "${input//%/\\x}")
ただし、上記の構文はプラス(+
)を正しく処理しないため、を介してスペースに置き換える必要がありますsed
。
次の関数urlencode()
とurldecode()
関数も使用できます。
urlencode() {
# urlencode <string>
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf '%%%02X' "'$c" ;;
esac
done
}
urldecode() {
# urldecode <string>
local url_encoded="${1//+/ }"
printf '%b' "${url_encoded//%/\\x}"
}
上記でurldecode()
は、データにバックスラッシュが含まれていないことを前提としています。
https://github.com/sixarm/urldecode.shにある同様のJoelのバージョンを次に示します。
bash + xxd
xxd
ツールを使用したBash関数:
urlencode() {
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done
esac
done
}
で発見cdownの要旨ファイルもで、stackoverflowの。
PHP
PHPを使用すると、次のコマンドを試すことができます。
$ echo oil+and+gas | php -r 'echo urldecode(fgets(STDIN));' // Or: php://stdin
oil and gas
あるいは単に:
php -r 'echo urldecode("oil+and+gas");'
-R
複数行入力に使用します。
Perl
Perlでは、を使用できますURI::Escape
。
decoded_url=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0])' "$encoded_url")
または、ファイルを処理するには:
perl -i -MURI::Escape -e 'print uri_unescape($ARGV[0])' file
awk
anonソリューションを試してください:
awk -niord '{printf RT?$0chr("0x"substr(RT,2)):$0}' RS=%..
注:パラメーター-n
はGNUに固有awk
です。
参照:awk printfを使用してテキストをurldecodeする。
ファイル名のデコード
ファイル名からURLエンコーディングを削除する必要がある場合は、deurlname
ツールrenameutils
(たとえばdeurlname *.*
)を使用します。
こちらもご覧ください:
関連する: