在Shell脚本中替换属性文件中的变量

问题描述

我有一个属性文件,其中包含一个环境变量,我正在尝试将其替换为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>

看,没有外部命令!