Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 用bash替换字符串(%20,%5B,…;)中的转义字符百分比_String_Bash_Utf 8_Ascii - Fatal编程技术网

String 用bash替换字符串(%20,%5B,…;)中的转义字符百分比

String 用bash替换字符串(%20,%5B,…;)中的转义字符百分比,string,bash,utf-8,ascii,String,Bash,Utf 8,Ascii,我有一些字符串包含百分比转义字符,如%20和%5B,我想将其转换为“普通”字符,如%20的\和[的%5B 我该怎么做?最后,多亏了#bash IRC频道,我找到了一个“不错”的解决方案: echo `echo string%20with%5Bsome%23 | sed 's/%/\\\x/g'` bash中的内置printf有一个特殊的格式说明符(即%b),它将\x**转换为相应的值: $ str='foo%20%5B12%5D' $ printf "%b\n" "${str//%/\\x}"

我有一些字符串包含百分比转义字符,如
%20
%5B
,我想将其转换为“普通”字符,如
%20
\
[
%5B

我该怎么做?

最后,多亏了#bash IRC频道,我找到了一个“不错”的解决方案:

echo `echo string%20with%5Bsome%23 | sed 's/%/\\\x/g'`

bash中的内置printf有一个特殊的格式说明符(即%b),它将\x**转换为相应的值:

$ str='foo%20%5B12%5D'
$ printf "%b\n" "${str//%/\\x}"
foo [12]

我不明白周围的
echo
给你买了什么。是不是
echo string%20with%5bome%23 | sed's/%/\\\x/g'
不起作用?@Thanatos:sed只是将
string%20with%5bome%23
更改为
string\x20with\x5Bsome\x23
。将其传递给
echo-e将意味着
\x..
转义正确已处理。[缺少
-e
,反勾号应该用双引号括起来:
echo-e“$(echo字符串%20,带有%5bbome%23 | sed's/%/\\\x/g”)”
]如果您想更改文件:
echo`sed's/%/\\\x/g'$file`>$newfile
我做了一些小的修改,并在这里编写了一个压缩版本:非常感谢,短版本对我来说很难维护,所以我保留了长版本。使用
echo
可以稍微缩短一点:
echo-e“${str/%/\x}”
。使用
printf
echo
无需对
\\x
进行两次转义:
\x