使用sed替换包含特殊字符的shell脚本中的字符串

时间:2012-03-09 13:23:19

标签: shell scripting sed

我在使用sed命令替换文本时遇到问题。当替换文本是没有任何特殊字符的平面文本时,sed命令可以正常工作。但我的替换文本包括unix文件系统路径,因此它无法正常工作。我收到如下错误,有人请帮助我:

$ ./install2
sed: -e expression #1, char 22: unknown option to `s'
sed: -e expression #1, char 16: unknown option to `s'
$ cat install2
#!/bin/bash
CONFIG=./config
TMPFILE=./tmpFile

while read line
do

        var=$(echo $line | cut -d'=' -f1)
        val=$(echo $line | cut -d'=' -f2)
        sed -i "s/$var/${val}/i" $TMPFILE

done < "$CONFIG"

$ cat config
INSTALLATION_ROOT=/opt/install/user-home/products
DOWNLOAD_HIBERNATE=false
CONFIG_ROOT=/opt/configs/cfgMgmt/products

$ cat tmpFile
<entry key="installationRoot">INSTALLATION_ROOT</entry>
<entry key="configDirectoryRoot">CONFIG_ROOT</entry>

谢谢, 晴天

2 个答案:

答案 0 :(得分:1)

试试这个sed -i "s|$var|${val}|i" $TMPFILE。使用|代替/来允许路径替换。

答案 1 :(得分:1)

/个字符可以由任何给定s命令中的任何其他单个字符统一替换。
/字符(或其他任何字符代替它)只有在\字符前面时才会显示在正则表达式或替换字符中。

sed -i "s@\$var@${val}@i" $TMPFILE