2016-07-11 16 views
1

Ich habe diesen Teil eines Codes, der Zeichenfolgen aus einem assoziativen Array findet und ersetzt, das Skript funktioniert, wenn es Zeichenfolgen ersetzt, aber es funktioniert nicht, wenn die Zeichenfolge Pfad ist.kann Pfad nicht mit sed ersetzen

#!/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

ich bin immer 2 Zeilen Fehler auf den 2 Wegen, die ich sie zu ersetzen versuchen.

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

kann mir jemand sagen, was falsch ist oder wie es geht, vielen dank.

Antwort

4

Da Ihr assoziatives Array / in Pfaden verwendet und Ihr sed Befehl auch / als Regex-Begrenzer verwendet, erhalten Sie diesen Fehler.

Sie können Ihre sed ändern, um eine alternative Trennzeichen zu verwenden:

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

Dank. es funktionierte .. – Vagho