加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

regex – 使用sed扩展环境变量

发布时间:2020-12-13 22:58:25 所属栏目:Linux 来源:网络整理
导读:我正在尝试编写一个sed命令来替换文件中的标记,其中包含来自环境变量的值,如下所示: export my_var=fooecho 'something {{my_var}} bar' | sed -r "s/{{(.*?)}}/$1/g" 我想获取令牌的名称(在本例中为my_var),然后用相同的名称替换环境变量的值. 这可能
我正在尝试编写一个sed命令来替换文件中的标记,其中包含来自环境变量的值,如下所示:

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

我想获取令牌的名称(在本例中为my_var),然后用相同的名称替换环境变量的值.

这可能吗?目前上面打印的东西是$my_var bar而不是foo bar,这就是我想要的东西.

我愿意使用其他工具,例如awk,如果用sed不可能的话.

解决方法

用$my_var替换{{my_var}}后,需要显式发送字符串以进行第二轮替换.

与eval

$eval echo "$(echo 'something {{my_var}} bar' | sed 's/{{([^}]+)}}/$1/g')"
something foo bar

或者用子壳

$echo 'echo something {{my_var}} bar' | sed 's/{{([^}]+)}}/$1/g' | sh
something foo bar

Perl只能对替换文本进行第二轮评估,而不是整个输出(使用s /// function的e修饰符):

$echo 'something {{my_var}} bar' | perl -pe 's/{{(w+)}}/$ENV{$1}/eg' 
something foo bar

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读