2012-03-09 18 views
1

テキストを置き換えるためにsedコマンドに問題があります。置換テキストが特別な文字列を持たないプレーンテキストの場合、sedコマンドは完璧に機能します。しかし、私の置き換えテキストには、unixファイルシステムのパスが含まれているため、動作しません。私は以下のようにエラーを取得しています、いくつかのいずれかが、この中で私を助けてください:sedを使用して特殊文字を含むシェルスクリプト内の文字列を置換

$ ./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コマンド内の他の1文字で一律に置き換えられます。
/文字(またはその代わりに使用されるその他の文字)は、正規表現または置換文字の前に、\文字がある場合にのみ表示できます。

sed -i "[email protected]\[email protected]${val}@i" $TMPFILE 
関連する問題