/ / nie może zastąpić ścieżki za pomocą sed - bash, sed, associative-array

nie może zastąpić ścieżki za pomocą sed - bash, sed, associative-array

Mam tę część kodu, która wyszukuje i zamienia ciągi z tablicy asocjacyjnej, skrypt działa, gdy zastępuje ciągi, ale nie działa, gdy ciąg jest ścieżką.

#!/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=(
["^CATALINA_HOME.*"]="CATALINA_HOME=$tomcatDirPath"
["^TOMCAT_USER.*"]="TOMCAT_USER=$tomcatSvcUser"
["^TOMCAT_SVC.*"]="TOMCAT_SVC=$tomcatSvcName"
["^JAVA_PATH.*"]="JAVA_PATH=$jdkDirPath"
)

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

Dostaję 2 linie błędów na 2 ścieżkach, które próbuję zastąpić.

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

czy ktoś może mi powiedzieć, co jest nie tak lub jak to zrobić, wielkie dzięki.

Odpowiedzi:

4 dla odpowiedzi № 1

Ponieważ twoja tablica asocjacyjna używa / na ścieżkach i twoich sed używa także polecenia / jako ogranicznik regex otrzymujesz ten błąd.

Możesz zmienić swój sed użyć alternatywnego ogranicznika:

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