Chinaunix

标题: sed 中变量赋值处理的问题,如何解决? [打印本页]

作者: siemens84cn    时间: 2009-10-04 10:29
标题: sed 中变量赋值处理的问题,如何解决?
问题是这样的:
如果变量中带有//或者/时候,变量赋值出现异常。

比如:
情况一、
[root@Linux ssiv]# CMS_URL=http:/www.sina.com
[root@Linux ssiv]# sed -i "s/ems.url=\(.*\)/ems.url=$CMS_URL/g" server.properties
sed: couldn't open file ww.sina.com/g: 没有这个文件或者目录

显然,变量赋值后,sed认为/w是自己的命令了,而非字符串http:/www.sina.com

情况二、
[root@Linux ssiv]# CMS_URL=http://www.sina.com.cn
[root@OWLinux viss]# sed -i "s/ems.url=\(.*\)/ems.url=$CMS_URL/g" server.properties
sed:-e 表达式 #1 字符 32 unknown option to `s'

显然,变量赋值后,sed认为//是自己的命令了,而非字符串http://www.sina.com

我个人归结为:sed在处理带有/字符串的时候,直接认为是命令了。大家看看,有什么类似于转义的方式来解决变量赋值问题。
作者: ywlscpl    时间: 2009-10-04 10:56
用别的符号代替s命令的分隔符,如#
sed -i "s#ems.url=\(.*\)#ems.url=$CMS_URL#g" server.properties
作者: siemens84cn    时间: 2009-10-04 12:06
谢谢大天使,你sed用的很活。
用#代替/是一个好办法。
作者: lucash    时间: 2009-10-04 12:19
怎么又开个帖子?
作者: siemens84cn    时间: 2009-10-31 22:50
标题: 回复 #4 lucash 的帖子
当时网络有问题,一个问题连续发了两次。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2