2017-03-10 2 views
4

특정 값을 수정하려는 json을 가지고 있지만 터미널은 항상 수정 된 값으로 json을 표시하지만 실제로 특정 파일의 값은 변경하지 않습니다. 샘플 json :json을 사용하여 json에서 키 - 값 수정

{ 
    name: 'abcd', 
    age: 30, 
    address: 'abc' 
} 

파일 자체의 주소 값을 변경하려고하지만 지금까지 그렇게 할 수 없었습니다. 사용해 보았습니다 :

jq '.address = "abcde"' test.json 

그러나 작동하지 않았습니다. 어떤 제안?

+0

그냥 리디렉션을 사용하십시오. 'jq '.address = "abcde"'test.json> test.json' – Aserre

+0

더 이상 json에 남아있는 데이터가 없습니다. – wolfsbane

+0

Woops, 죄송합니다,'bash'에서 같은 파일로 리디렉션하는 걸 잊었습니다. 원래 파일이 삭제됩니다. – Aserre

답변

8

AFAIK jq은 내부 편집을 지원하지 않기 때문에 먼저 임시 파일로 리디렉션 한 다음에 원본 파일을 교체하거나처럼 moreutils 패키지에서 sponge 유틸리티를 사용해야합니다

jq '.address = "abcde"' test.json|sponge test.json 

출력을 변수 등으로 저장하는 것과 같은 "동일한 파일로 리디렉션"하는 다른 기술이 있습니다. "Unix & Linux StackExchange"는 더 자세히 배우고 싶다면 시작하는 것이 좋습니다.

+0

효과가있었습니다. 감사! – wolfsbane

7

임시 파일을 사용하십시오. 그것은 in-place 편집을 수행한다고 주장하는 프로그램이하는 일입니다.

tmp=$(mktemp) 
jq '.address = "abcde"' test.json > "$tmp" && mv "$tmp" test.json 
+0

효과가있었습니다. 감사! – wolfsbane