[英]sed regular expression to replace value with variable of same name
我正在嘗試替換yml文件中的一些變量。
Samepl.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'
使用GNU awk作為第三個參數match():
$ myVal="foo" gawk 'match($0,/(.*{{\s*)(\S+)(\s*}}.*)/,a) && (a[2] in ENVIRON) { $0 = a[1] ENVIRON[a[2]] a[3] } 1' file
spring:
metadataMap:
instanceId: ${spring.application.name}:${randomvalue}
client:
version: 1.0
myval: {{ foo }}
$ other="foo" gawk 'match($0,/(.*{{\s*)(\S+)(\s*}}.*)/,a) && (a[2] in ENVIRON) { $0 = a[1] ENVIRON[a[2]] a[3] } 1' file
spring:
metadataMap:
instanceId: ${spring.application.name}:${randomvalue}
client:
version: 1.0
myval: {{ myVal }}
或者,如果您喜歡:
$ myVal="foo" gawk 'match($0,/(.*{{\s*)(\S+)(\s*}}.*)/,a) { if (a[2] in ENVIRON) { $0 = a[1] ENVIRON[a[2]] a[3]} else {print "the sky is falling!"; exit} } 1' file
spring:
metadataMap:
instanceId: ${spring.application.name}:${randomvalue}
client:
version: 1.0
myval: {{ foo }}
$ other="foo" gawk 'match($0,/(.*{{\s*)(\S+)(\s*}}.*)/,a) { if (a[2] in ENVIRON) { $0 = a[1] ENVIRON[a[2]] a[3]} else {print "the sky is falling!"; exit} } 1' file
spring:
metadataMap:
instanceId: ${spring.application.name}:${randomvalue}
client:
version: 1.0
the sky is falling!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.