在使用SED替换字符串时使用Ubuntu环境变量

空军基地

ubuntu中的环境变量如何用于使用SED替换字符串?

目前,我正在使用:

sed -i.bak 's/autoLogoffTime="[^"]*"/autoLogoffTime="2:15,AM"/g' file.xml

我希望能够将替换字符串作为系统环境变量

export LOGOFF_TIME="2:15,AM"
sed -i.bak 's/autoLogoffTime="[^"]*"/autoLogoffTime=$LOGOFF_TIME/g' file.xml
约翰1024

诀窍在于,单引号内的shell变量不会扩展。为了使它们可靠地扩展,它们应放在双引号内。尝试:

sed 's/autoLogoffTime="[^"]*"/autoLogoffTime="'"$LOGOFF_TIME"'"/g' file.xml

注意,我们已经将表达式的第一部分和最后一部分留在了单引号中。这避免了用"双引号引起来的字符串转义的问题

除非LOGOFF_TIME变量的源在您的控制之下,否则不要使用此方法如果LOGOFF_TIME变量包含sed活动字符,则结果可能是不需要的。

如果您不控制,则使用awk更安全:

awk -v x="$LOGOFF_TIME" '{gsub(/autoLogoffTime="[^"]*"/, "autoLogoffTime=\"" x "\"")} 1' file.xml

要使用awk就地更改文件:

awk -i inplace -v x="$LOGOFF_TIME" '{gsub(/autoLogoffTime="[^"]*"/, "autoLogoffTime=\"" x "\"")} 1' file.xml

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章