2017-07-05 15 views
1

ymlファイルのいくつかの変数を置き換えようとしています。値を同じ名前の変数に置き換えるsed正規表現

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 

何か提案がありますか?

+0

シェルが文字列を二重引用符の中に展開してsedに送ると、sedが '\ 1'を解決する原因を知ることができません。 – stevesliva

+0

'sed'ではなく、適切なテンプレートツールを使用してください。 – chepner

答えて

2

あなたはそのために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' 
+0

こんにちは@choroba、パターンに従うための修正がありますか? {{var1}}:{{var2}}/{{var3}} ' それは一致する個々のベクトルではありません – Pasha

+0

@Pasha:マッチを控え目にするために '+'の後に追加されます。 – choroba

+0

ありがとうございます@チョロバ..その働く.. – Pasha

0

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! 
関連する問題