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
도구가있는 배쉬 기능 :
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의 요지 파일 도에서 유래 .
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에서는을 사용할 수 있습니다 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
어 wk
Anon 솔루션을 사용해보십시오 .
awk -niord '{printf RT?$0chr("0x"substr(RT,2)):$0}' RS=%..
참고 : 매개 변수 -n
는 GNU에만 해당됩니다 awk
.
참조 : 텍스트를 URLDECODE하는 AWK printf의 사용 .
파일 이름 디코딩
파일 이름에서 URL 인코딩을 제거해야하는 경우 deurlname
도구 renameutils
(예 :)를 사용 deurlname *.*
하십시오.
또한보십시오:
관련 :