2016-07-11 1 views
1

이 결합 부분의 문자열을 찾아 교체하는 코드 부분을 가지고 있는데, 문자열을 대체 할 때 스크립트가 작동하지만 문자열이 path 일 때 작동하지 않습니다. 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