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
。