sed 脚本分隔符引起的问题

12350阅读 0评论2009-06-01 seaquester
分类:系统运维

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的替换操作的分隔符“/”引起混淆;所以,只要不使用“/”做分隔符就可以解决这个问题。
上一篇:回车符引发的awk错误
下一篇:在某一个目录中寻找与指定的文件内容相同的文件