sed 脚本分隔符引起的问题
冷胜魁(Seaquester)
lengshengkui@gmail.com
2009-5-12
今天在使用sed进行替换操作的时候遇到一个问题。
有一个配置文件t1.def,里面有个一宏保存了一个路径WKDIR。
#config file t1.def
#root path
WKDIR=/home/code/apue
# End
我想通过脚本来实现替换它为当前路径。我是通过sed来做替换操作,具体代码如下:
#!/bin/sh
PWD=`pwd`
DEF_FILE="t1.def"
cat $DEF_FILE | sed "s/WKDIR=.*/WKDIR=$PWD/g" #> $DEF_FILE
exit 0
但是执行的结果却得到一个错误信息:
sed: -e expression #1, char 19: unknown option to `s'
从语法上看,我没有发现任何问题;查找了一些资料,也没有什么发现。
百思不得其解之下,我做了一些尝试,终于发现,如果使用“%”而不是“/”来作为sed的替换操作的分隔符,就不会出错。
代码如下:
#!/bin/sh
PWD=`pwd`
DEF_FILE="t1.def"
cat $DEF_FILE | sed "s%WKDIR=.*%WKDIR=$PWD%g" #> $DEF_FILE
exit 0
最后终于发现,问题就出在这个“/”,因为路径里面包含有“/”作为分隔符,这会和sed的替换操作的分隔符“/”引起混淆;所以,只要不使用“/”做分隔符就可以解决这个问题。
阅读(12206) | 评论(0) | 转发(0) |