无法使用 sed 替换路径
can not replace path using 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=(
["^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
我在尝试替换它们的 2 条路径上收到 2 行错误。
sed: -e expression #1, char 35: unknown option to `s'
sed: -e expression #1, char 27: unknown option to `s'
谁能告诉我哪里出了问题或如何解决,非常感谢。
由于您的关联数组在路径中使用了 /
,并且您的 sed
命令也使用了 /
作为正则表达式定界符,因此您收到此错误。
您可以更改 sed
以使用替代分隔符:
for i in "${!TomcatInitD[@]}"
do
value="${TomcatInitD[$i]}"
key="$i"
sed -i -e "s~$key~$value~" $initDTomcatFilePath
done
我有这部分代码可以从关联数组中查找和替换字符串,脚本在替换字符串时有效,但在字符串为路径时无效。
#!/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
我在尝试替换它们的 2 条路径上收到 2 行错误。
sed: -e expression #1, char 35: unknown option to `s'
sed: -e expression #1, char 27: unknown option to `s'
谁能告诉我哪里出了问题或如何解决,非常感谢。
由于您的关联数组在路径中使用了 /
,并且您的 sed
命令也使用了 /
作为正则表达式定界符,因此您收到此错误。
您可以更改 sed
以使用替代分隔符:
for i in "${!TomcatInitD[@]}"
do
value="${TomcatInitD[$i]}"
key="$i"
sed -i -e "s~$key~$value~" $initDTomcatFilePath
done