regex - sed正则表达式用同名变量替换值

标签 regex linux bash awk sed

我正在尝试替换 yml 文件中的一些变量。

Sampl.yml

spring:
  metadataMap:
    instanceId: ${spring.application.name}:${randomvalue}
client:
  version: 1.0
  myval: {{ myVal }}

我使用以下命令替换双括号内的所有值,例如: {{ var }} 替换为同名的环境变量,即值: ${var} 如果变量未定义,它应该失败。但没有运气

cat sample.yml | sed -e "s/{{ \(.*\) }}/${\1:?}/g" > /tmp/a

有什么建议吗?

最佳答案

您可以使用 Perl 来实现:

perl -pE 's:{{\s*(\S+?)\s*}}:$ENV{$1} // die "$1 not set":ge'

如果您的 Perl 版本早于 5.10,则需要更详细:

perl -pe 's%{{\s*(\S+?)\s*}}%exists $ENV{$1} ? $ENV{$1} : die "$1 not set"%ge'

关于regex - sed正则表达式用同名变量替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933441/

相关文章:

php - 正则表达式之间的精确数字/字符串匹配

r - 如何在 R 中查找和替换具有舍入值的文本中的数字?

java - 分割逗号分隔的字符串,忽略引号中的逗号,但允许字符串带有一个双引号

linux - 如何在 shell 中使用花括号 (bash)

Linux 查找目录并只打印名称

linux - 转换Bash脚本代码,用于代码bat文件windows

javascript - 使用 Javascript 进行正则表达式匹配

linux - 存储文件名的变量

mysql - Linux SED AWK Sqlite 转储到 MySQL 将以 create table 开头的行上的字符串更改为 varchar

linux - 按子列排序