Tengo esta parte de un código que encuentra y reemplaza cadenas de una matriz asociativa, el script funciona cuando reemplaza cadenas pero no funciona cuando la cadena es la ruta.
#!/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
Estoy obteniendo 2 líneas de error en las 2 rutas que estoy tratando de reemplazar.
sed: -e expression #1, char 35: unknown option to `s"
sed: -e expression #1, char 27: unknown option to `s"
¿Alguien puede decirme qué está mal o cómo hacerlo? Muchas gracias.
Respuestas
4 para la respuesta № 1Dado que su matriz asociativa está utilizando /
en caminos y tu sed
comando también está utilizando /
Como regim delimitador está recibiendo este error.
Puedes cambiar tu sed
Para utilizar un delimitador alternativo:
for i in "${!TomcatInitD[@]}"
do
value="${TomcatInitD[$i]}"
key="$i"
sed -i -e "s~$key~$value~" $initDTomcatFilePath
done