Answers:
使用bash,zsh中,GNU回声或在某些系统上的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
命令支持的选项之一)
正如@JoshLee指出的那样,可以通过直接使用避免“回声警告”:
printf ${url_encoded_string//%/\\x}
而是直接在第一个命令后面。
使用perl:
perl -pe 's/%([0-9A-F]{2})/pack"H2",$1/gei'
或搭配URI::Escape
:
perl -MURI::Escape -pe '$_=uri_unescape$_'
$_
gnu.org/software/bash/manual/html_node/Special-Parameters.html
$_
这里是perl
的$_
,不是bash
的。与该-p
选项结合使用时,将对每个输入记录运行perl表达式(从没有提供参数的情况下从作为参数或stdin给出的文件中读取记录),当前记录存储在中$_
。这是类似awk
的$0
。
有一个名为的程序convmv
可以为您提供帮助。
只需使用convmv --unescape /some_path/target_file
。它将进行空运行。
确认后,使用convmv --notest --unescape /some_path/target_file
继续。
该程序的主页是:http : //j3e.de/linux/convmv/