Chinaunix首页 | 论坛 | 博客
  • 博客访问: 597139
  • 博文数量: 50
  • 博客积分: 4764
  • 博客等级: 上校
  • 技术积分: 597
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-18 09:00
个人简介

资深IT码农,擅长Linux、C/C++、bash

文章分类

全部博文(50)

文章存档

2015年(17)

2014年(2)

2011年(7)

2010年(4)

2009年(20)

分类: 系统运维

2009-06-01 09:48:18

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) |
给主人留下些什么吧!~~