先看一个网址:http:\/\/file.dbank.com\/file\/MDAwMDAwMDE20gbBlvLKVZyBR6F61GOkFWK8nscfVRB5PP7-bpO9uA..\/6f5902ac237024bdd0c176cb93063dc4c\/ 这里面包含有反斜杠和斜杠,我们想将反斜杠去掉,而保留斜杠。我们在命令行里一般会这么做:从输出可以看到,它确实生效了。但当这句话放到脚本里:
[Bash shell] 纯文本查看 复制代码
#!/bin/sh
myurl="http:\/\/file.dbank.com\/file\/MDAwMDAwMDE20gbBlvLKVZyBR6F61GOkFWK8nscfVRB5PP7-bpO9uA..\/6f5902ac237024bdd0c176cb93063dc4c\/"
myurl=`echo $myurl | sed 's/\\//g'`
echo $myurl
再运行时,会发现下面的错误:$ ./temp.sh
sed: -e expression #1, char 6: unterminated `s' command 这是因为,当 sed 向前扫描的时候,当过滤掉 http:: 后的第一个 '\' 后,于是产生了一个 '/' 符,此时造成了 '/' 符的多余而未能闭合。修正的办法是在匹配 / / 中一次匹配两个 '\' 符号,即写成 s/\\\\//g' ,如将上面的 sed 语句改成:myurl=`echo $myurl | sed 's/\\\\//g'` 这样写,即使只有一个 '\' 符号,它也能匹配并且过滤掉,那么再次运行时就输出了正确的网址:http://file.dbank.com/file/MDAwMDAwMDE20gbBlvLKVZyBR6F61GOkFWK8nscfVRB5PP7-bpO9uA../6f5902ac237024bdd0c176cb93063dc4c/ |