Unix 替换包含环境变量的路径字符串

Unix 替换包含环境变量的路径字符串,unix,awk,log4j,substring,Unix,Awk,Log4j,Substring,我试图从log4j.properties获取应用程序日志路径,并试图使其成为动态路径。 log4j.properties中的日志文件包括{catalina.base},我想用$catalina_HOME环境变量替换它。 我在下面使用了字符串替换 以下是代码 /*从log4j.properties*获取日志路径 logfile=$(awk'/logfile.File/{print$NF}'$CATALINA_HOME/webapps/“$filename”/WEB-INF/classes/log4

我试图从log4j.properties获取应用程序日志路径,并试图使其成为动态路径。 log4j.properties中的日志文件包括{catalina.base},我想用$catalina_HOME环境变量替换它。 我在下面使用了字符串替换

以下是代码

/*从log4j.properties*获取日志路径

logfile=$(awk'/logfile.File/{print$NF}'$CATALINA_HOME/webapps/“$filename”/WEB-INF/classes/log4j.properties | grep-Po'logfile.File=\K[^“]*”)

/*将{catalina.base}替换为$catalina_HOME*/

convertlogfile=“${logfile/“{catalina.base}”/$catalina_HOME}”

/*查看输出*/

echo$convertlogfile

问题是输出是: $/usr/local/tomcat/logs/Application.log


我无法去掉初始的“$”符号,也无法使用路径。

如果
echo$convertlogfile
的输出是
$/usr/local/tomcat/logs/Application.log
, 然后,
$logfile
的值必须是
${catalina.base}
。 然后我不明白为什么你想使用一个模式替换,而你可以简单地做到:

convertlogfile=$CATALINA_HOME
但无论如何,要在开始时去掉
$
,您可以这样编写替换,但我不明白这一点:

convertlogfile="${logfile/"\${catalina.base}"/$CATALINA_HOME}"