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