我正在尝试编写一个sed命令来替换文件中的标记,其中包含来自环境变量的值,如下所示:
export my_var=foo
echo 'something {{my_var}} bar' | sed -r "s/\{\{(.*?)\}\}/$\1/g"
我想获取令牌的名称(在这种情况下为 my_var ),然后用相同的名称替换环境变量的值。
这可能吗?目前上面打印something $my_var bar
而不是something foo bar
这是我想要的。
如果使用sed无法使用其他工具,我可以使用其他工具。
答案 0 :(得分:3)
将{{my_var}}
替换为$my_var
后,您需要明确发送第二轮替换字符串。
eval
$ eval echo "$(echo 'something {{my_var}} bar' | sed 's/{{\([^}]\+\)}}/$\1/g')"
something foo bar
或使用子shell
$ echo 'echo something {{my_var}} bar' | sed 's/{{\([^}]\+\)}}/$\1/g' | sh
something foo bar
Perl只能对替换文本进行第二轮评估,而不是整个输出(使用s///
函数的e
修饰符):
$ echo 'something {{my_var}} bar' | perl -pe 's/\{\{(\w+)\}\}/$ENV{$1}/eg'
something foo bar
答案 1 :(得分:0)
如果你想使用变量,那么在变量之前添加$ sign。
导出my_var = foo
回声"某事{{$ my_var}} bar" | sed -r" s / {{(。*?)}} / $ \ 1 / g" | sed' s | [$] || g'
输出:
foo bar