我正在尝试编写sed命令,用环境变量中的值替换文件中的 token ,如下所示:

export my_var=foo
echo 'something {{my_var}} bar' | sed -r "s/\{\{(.*?)\}\}/$\1/g"

我想获取 token 的名称(在这种情况下为 my_var ),然后用相同的名称替换环境变量的值。

这可能吗?当前上面打印的是something $my_var bar而不是something foo bar,这是我想要的。

如果sed无法使用,我愿意使用其他工具,例如awk。

最佳答案

{{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

关于regex - 使用sed扩展环境变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33038494/

10-14 13:20