【问题标题】:can not replace path using sed无法使用 sed 替换路径
【发布时间】:2016-07-11 13:58:41
【问题描述】:

我有这部分代码从关联数组中查找和替换字符串,脚本在替换字符串时工作,但当字符串是路径时它不工作。

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

谁能告诉我有什么问题或者怎么做,非常感谢。

【问题讨论】:

    标签: regex bash sed associative-array


    【解决方案1】:

    由于您的关联数组在路径中使用/,并且您的sed 命令也使用/ 作为正则表达式分隔符,因此您会收到此错误。

    您可以更改 sed 以使用其他分隔符:

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

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 1970-01-01
      • 2018-01-02
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2012-08-17
      相关资源
      最近更新 更多