2012-03-09 509 views
1

我面臨sed命令替換文本的問題。當替換文本是沒有任何特殊字符的平面文本時,sed命令可以很好地工作。但是我的替換文本包含unix文件系統路徑,因此它不起作用。我下面得到一個錯誤,有人請幫我在這:使用sed替換包含特殊字符的shell腳本中的字符串

$ ./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> 

感謝, 陽光

回答

1

試試這個sed -i "s|$var|${val}|i" $TMPFILE。使用|而不是/來允許路徑替換。

1

/字符可能會被任何給定的s命令中的任何其他單個字符統一替換。
/字符(或任何其他字符代替它)只有在前面有\字符時纔會出現在正則表達式或替換字符中。

sed -i "[email protected]\[email protected]${val}@i" $TMPFILE 
相關問題