我正在尝试替换 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/