次のJSONファイルを入力として使用する必要があり、ファイルに複数の変数エントリを含めることができます。環境変数をvar1
検索しvar2
、以下のJSONの値を置き換える必要があります。
{
"var1": "valueplaceholder",
"var2": "valueplaceholder"
}
私は次のコマンドを試しました
cat input.json | sed "s/\"\([A-Z0-9_]*\)\":\s*\"\([A-Za-z0-9_]*\)\"/\"\1\": \"$\1\"/g"
ただし、次の出力が生成されます。
{
"var1": "$var1",
"var2": "$var2"
}
変数の値を取得するには?つまり、$var1
textの値を変更する必要があります$var1
。
答え1
与えられた
$ cat file.json
{ "var1": "valueplaceholder", "var2": "valueplaceholder", "var3": "valueplaceholder" }
その後、with_entries
構造を借りてjqを使ってオブジェクトのキーと値を交換するには?そしてjqの$ENV
配列を使用してください。
$ export var1="foo" var2="bar"
$ jq 'with_entries( .value = $ENV[.key] )' file.json
{
"var1": "foo",
"var2": "bar",
"var3": null
}
または、一致しない変数を空の文字列に設定したり、元の値を保持したい場合
$ jq 'with_entries( .value = ($ENV[.key] // "") )' file.json
{
"var1": "foo",
"var2": "bar",
"var3": ""
}
または
$ jq 'with_entries( .value = ($ENV[.key] // .value) )' file.json
{
"var1": "foo",
"var2": "bar",
"var3": "valueplaceholder"
}
または必要に応じて削除存在しないキー
$ jq 'with_entries( .value = ($ENV[.key] // empty) )' file.json
{
"var1": "foo",
"var2": "bar"
}