다음 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"
}