我正在尝试编写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/