曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6107|回复: 0
打印 上一主题 下一主题

关于 ”unterminated `s' command“ 错误

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2011-10-19 11:41:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先看一个网址:
http:\/\/file.dbank.com\/file\/MDAwMDAwMDE20gbBlvLKVZyBR6F61GOkFWK8nscfVRB5PP7-bpO9uA..\/6f5902ac237024bdd0c176cb93063dc4c\/
这里面包含有反斜杠和斜杠,我们想将反斜杠去掉,而保留斜杠。我们在命令行里一般会这么做:
$ echo http:\/\/file.dbank.com\/file\/MDAwMDAwMDE20gbBlvLKVZyBR6F61GOkFWK8nscfVRB5PP7-bpO9uA..\/6f5902ac237024bdd0c176cb93063dc4c\/ | sed 's/\\//g'
http://file.dbank.com/file/MDAwM ... dd0c176cb93063dc4c/
从输出可以看到,它确实生效了。但当这句话放到脚本里:
[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/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-3 11:53 , Processed in 0.065707 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表