问题描述
我有一个属性文件,其中包含一个环境变量,我正在尝试将其替换为shell脚本中的实际值。 这是我的属性文件:
host=${HOST}
other=otherValue
如何更改属性文件中的$ {HOST}并将其重写为新文件或Shell脚本中的相同文件?
解决方法
使用此Perl单线版:
perl -pe 's/\$\{(\w+)\}/$ENV{$1}/' input_file > output_file
或更改同一文件,将旧文件保存为扩展名.bak
:
perl -i.bak -pe 's/\$\{(\w+)\}/$ENV{$1}/' input_file
Perl单行代码使用以下命令行标志:-e
:告诉Perl在代码中而不是在文件中查找代码。-p
:一次循环输入一行,默认情况下将其分配给$_
。每次循环迭代后添加print $_
。-i.bak
:就地编辑输入文件(覆盖输入文件)。覆盖之前,通过在扩展名后加上扩展名.bak
,保存原始文件的备份副本。
s/\$\{(\w+)\}/$ENV{$1}/
:将看起来像变量名的字符串更改为其值。具体来说,\$
是文字美元符号,\{
和\}
是文字括号(它们都转义了)。 (\w+)
是一个或多个单词字符,带有括号以捕获该模式并将其保存到第一个捕获变量$1
中。刚刚匹配的整个模式(看起来像${...}
)被相应的环境变量的值替换。
另请参见: perldoc perlrun
: how to execute the Perl interpreter: command line switches perldoc perlre
: Perl regular expressions (regexes) perldoc perlre
: Perl regular expressions (regexes): Quantifiers; Character Classes and other Special Escapes; Assertions; Capture groups perldoc perlrequick
: Perl regular expressions quick start
您只需读取属性文件并评估该行,即可替换环境变量。示例:
<h1 class="ProductMeta__Title">Product title - product feature</h1>
看,没有外部命令!