2016-07-11 8 views
1

私は連想配列の文字列を見つけて置き換えるこのコード部分を持っていますが、文字列を置き換えるときにスクリプトは動作していますが、は、sedを使用してパスを置き換えることはできません

#!/bin/bash 
 
tomcatDirName="tomcat801" 
 
tomcatSvcName="tomcatSvc" 
 
tomcatSvcUser="tomcatUsr" 
 
tomcatSvcGrp="tomcatGrp" 
 
installationPath="/opt/app" 
 
tomcatDirPath="$installationPath/$tomcatDirName" 
 
initDTomcatFilePath="/root/scripts/tomcat801" 
 
javaDirName="java" 
 
javaDirPath="$installationPath/$javaDirName" 
 
jdkDirPath="$javaDirPath/jdk1.8.0_45" 
 

 

 
declare -A TomcatInitD=(
 
\t ["^CATALINA_HOME.*"]="CATALINA_HOME=$tomcatDirPath" 
 
\t ["^TOMCAT_USER.*"]="TOMCAT_USER=$tomcatSvcUser" 
 
\t ["^TOMCAT_SVC.*"]="TOMCAT_SVC=$tomcatSvcName" 
 
\t ["^JAVA_PATH.*"]="JAVA_PATH=$jdkDirPath" 
 
) 
 

 
for i in "${!TomcatInitD[@]}" 
 
do 
 
\t value="${TomcatInitD[$i]}" 
 
\t key="$i" 
 
\t sed -i -e "s/$key/$value/" $initDTomcatFilePath 
 
done

私はそれらを交換しようとしています2つのパス上の誤差の2行を取得しています。

sed: -e expression #1, char 35: unknown option to `s' 
sed: -e expression #1, char 27: unknown option to `s' 

はいずれもいただきました間違っていたり、それを行うにはどのように、多くのおかげで私に言うことができます。

答えて

4

連想配列はパスに/を使用しており、sedコマンドも/を正規表現の区切り文字として使用しているため、このエラーが発生しています。

for i in "${!TomcatInitD[@]}" 
do 
    value="${TomcatInitD[$i]}" 
    key="$i" 
    sed -i -e "s~$key~$value~" $initDTomcatFilePath 
done 
+1

感謝:

あなたのsedは、代替区切り文字を使用するように変更することができます。出来た .. – Vagho

関連する問題