이것이 json
우리가 편집하려는 파일 입니다
실시예 1
{
"topics": [{"topic": "hfgt_kejd_tdsfd”}],
"version": 1
}
실시예 2
{
"topics": [{"topic": "hfgt_kj_fsrfdfd”}],
"version": 1
}
topics
줄의 세 번째 단어를 다른 단어로 바꾸고 싶습니다 (sed 또는 perl oneliner를 통해).
~에 대한실시예 1, 다음으로 바꾸려고 할 hfgt_kejd_tdsfd
때 예상되는 결과test_1
{
"topics": [{"topic": "test_1”}],
"version": 1
}
실시예 3
more /tmp/file.json
{
"topics": [{"topic": "TOPIC_GGGG”}],
"version": 1
}
# sed 's/\(topic\": "\)[a-z_]*/\1test_1/' /tmp/file.json
{
"topics": [{"topic": "test_1TOPIC_GGGG”}],
"version": 1
}
답변1
사용 jq
:
$ jq '.topics[0].topic |= "test_1"' file.json
{
"topics": [
{
"topic": "test_1"
}
],
"version": 1
}
topic
이는 JSON 문서를 읽고 배열의 첫 번째 요소 항목 값을 topics
string 으로 수정합니다 test_1
.
변수에 값(UTF-8로 인코딩됨)이 있는 경우:
$ val='Some value with "double quotes"'
$ jq --arg string "$val" '.topics[0].topic |= $string' file.json
{
"topics": [
{
"topic": "Some value with \"double quotes\""
}
],
"version": 1
}
펄 사용:
$ perl -MJSON -0777 -e '$h=decode_json(<>); $h->{topics}[0]{topic}="test_1"; print encode_json($h), "\n"' file.json
{"topics":[{"topic":"test_1"}],"version":1}
변수 사용:
$ val='Some value with "double quotes"'
$ STRING=$val perl -MJSON -0777 -e '$string = $ENV{STRING}; utf8::decode $string; $h=decode_json(<>); $h->{topics}[0]{topic}=$string; print encode_json($h), "\n"' file.json
{"topics":[{"topic":"Some value with \"double quotes\""}],"version":1}
둘 다 Perl JSON
모듈을 사용하여 JSON 문서를 디코딩하고 변경해야 할 값을 변경한 다음 다시 인코딩된 데이터 구조를 출력합니다. 오류 처리는 연습으로 남겨둡니다.
두 번째 코드 부분에서는 삽입할 값이 STRING
Perl 코드에 환경 변수로 전달됩니다. 이는 "slurp" 모드의 파일에서 JSON 문서를 읽기 때문입니다 -0777
.
답변2
match [A-Za-z_]
(대부분의 로케일에서 영어 문자와 밑줄보다 훨씬 더 많이 일치함)를 사용하는 대신 [^"]
다음을 사용하세요.제거하다"
(그런데 질문의 예에는 제목 이름 뒤의 닫는 따옴표로 json 인용문( , U+0022, ) 대신 ”
(U+201D, )가 있습니다 . 원본 예제 파일에서는 그렇지 않다고 가정합니다. , 이렇게 하면 json이 유효하지 않게 됩니다):RIGHT DOUBLE QUOTATION MARK
"
QUOTATION MARK
sed 's/\("topic": "\)[^"]*/\1test_1/' < file.json
(주제 이름 대체가 올바르게 JSON으로 인코딩되었는지 확인하는 것은 사용자의 책임입니다. 즉, UTF-8 문자 세트, 인코딩된 제어 문자(예: \n
줄 바꿈) 및 "
로 인코딩됩니다 \"
.
답변3
sed -i 's/\(topic\": "\)[A-Za-z_]*/\1test_1/' file.json