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

使用sed替换包含特殊字符的shell脚本中的字符串,shell,scripting,sed,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 CONFI

我面临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>
$。/install2
sed:-e表达式#1,第22字符:`s'的未知选项
sed:-e表达式#1,字符16:“s”的选项未知
$cat install2
#!/bin/bash
配置=./CONFIG
TMPFILE=./TMPFILE
读行时
做
var=$(echo$行| cut-d'='-f1)
val=$(echo$行| cut-d'='-f2)
sed-i“s/$var/${val}/i”$TMPFILE
完成<“$CONFIG”
$cat配置
INSTALLATION\u ROOT=/opt/install/user home/products
下载\u HIBERNATE=false
CONFIG_ROOT=/opt/configs/cfgmt/products
$cat tmpFile
安装根目录
配置根
谢谢,
Sunny

试试这个
sed-i“s |$var |${val}i”$TMPFILE
。使用
|
而不是
/
来允许路径替换。

在任何给定的
s
命令中,
/
字符可以统一替换为任何其他单个字符。
只有在前面有
\
字符的情况下,
/
字符(或其他替代字符)才能出现在regexp或替换中

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