加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 综合聚焦 > Linux > 正文

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

发布时间:2021-02-20 18:04:53 所属栏目:Linux 来源:互联网
导读:在 Linux中,说我有以下文件(例如conf.properties): HOST_URL=http://$HOSTNAMESTD_CONFIG=http://$HOSTNAME/configUSER_CONFIG=http://$HOSTNAME/config/$unconfigured 我想创建另一个文件,所有的环境变量被替换…例如.说环境变量$HOSTNAME是’myhost’,$unc

在 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,以免混淆读者)

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读