linux – 替换属性文件中的环境变量

前端之家收集整理的这篇文章主要介绍了linux – 替换属性文件中的环境变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Linux中,说我有以下文件(例如conf.properties):
HOST_URL=http://$HOSTNAME
STD_CONFIG=http://$HOSTNAME/config
USER_CONFIG=http://$HOSTNAME/config/$unconfigured

我想创建另一个文件,所有的环境变量被替换…例如.说环境变量$HOSTNAME是’myhost’,$unconfigured没有设置,脚本应该产生以下输出

HOST_URL=http://myhost
STD_CONFIG=http://myhost/config
USER_CONFIG=http://myhost/config/

我在想,这可以通过一种简单的单线程来实现,有一些sed / awk魔法,但是我不是专家,我的搜索是静静的,所以感谢任何帮助.

编辑:

我应该提到这个文件真的可以是任何格式的文本文件,例如xml.我只是希望用环境中当前设置的任何东西来替换任何看起来像env变量的东西.

解决方法

sed 's/$HOSTNAME/myhost/g;s/$unconfigured//g' yourfile.txt > another_file.txt

更新:

根据您的问题的更新,这不会是一个很好的解决方案.

update2:

这是基于answer to a related question.我已经入侵(我不熟悉perl)删除未定义的vars.

perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg; s/\$\{([^}]+)\}//eg' yourfile.txt

应该适用于任何输入文本文件,但是您将需要使用简化字符串匹配的${…}格式定义vars.

(关于eval的恶意移动到separate post,以免混淆读者)

猜你在找的Linux相关文章