GNU AWKと一致する第三引数のために( ):
$ 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!
シェルが文字列を二重引用符の中に展開してsedに送ると、sedが '\ 1'を解決する原因を知ることができません。 – stevesliva
'sed'ではなく、適切なテンプレートツールを使用してください。 – chepner