다음은 내 json 파일에서 발췌한 내용입니다.
},
{
"name": "asdasd",
"script": "dsad.js",
"merge_logs": ture,
"error_file": "/ofghfghgfh.log",
"out_file": "/fghgfhfgg",
"cwd": "",
"autorestart": true,
"log_date_format" : "YYYY-MM-DD HH:mm Z",
"env": {
"NODE_ENV": "desa",
"KEY": "VtZOiz0Qc4afFs6j+h2r"
}
}]
"KEY" 뒤에 문구를 추가하고 싶습니다. 현재 값을 바꾸세요.
"sed"를 시도했지만 줄 끝에 추가했습니다.
sed '/KEY/s/$/1234/g' .json
"-i" 옵션을 사용하여 파일을 직접 변경해야 합니다.
답변1
sed
작업에 잘못된 도구입니다. 올바른 도구 중 하나는 입니다 jq
.
% 고양이 wibble.json [ { "이름": "asdasd", "스크립트": "dsad.js" }, { "log_date_format": "YYYY-MM-DD HH:mm Z", "환경":{ "NODE_ENV": "데사", "키": "VtZOiz0Qc4afFs6j+h2r" } } ] % jq '.[1]."env"."KEY" = "1234"' wibble.json [ { "이름": "asdasd", "스크립트": "dsad.js" }, { "log_date_format": "YYYY-MM-DD HH:mm Z", "환경":{ "NODE_ENV": "데사", "키": "1234" } } ] %
심지어 JSON이 실제로 유효하지 않은 것으로 나타났습니다.
% jq.ortiga.json 구문 분석 오류: 4행, 23열의 텍스트가 잘못되었습니다. %
답변2
이것을 사용할 수 있습니다( i
옵션을 사용하여 파일을 수정하되 먼저 작동하는지 확인하십시오).
sed -E 's/("KEY":) (".*")/\1 anything/g' .json
먼저 줄을 두 부분으로 나눈 다음 일치하고 "KEY":
공백을 지정한 다음 두 번째 부분을 다른 부분으로 바꿉니다.
예를 들어 보겠습니다 KEY='"1234"'
(작은따옴표를 사용하면 KEY의 값은 가 됩니다 "1234"
). 그러면 사용할 준비가 된 것입니다.
sed -E "s/(\"KEY\":) (\".*\")/\1 $KEY/g" .json
답변3
중첩된 구조(예: xml, html, json 등)는 데이터 모델을 이해하는 유틸리티에 의해 처리되어야 합니다. 와 같은 라인 인식 도구에 의존하는 경우 sed
.awk
따라서 JSON 입력은 JSON 인식 도구로 처리되어야 합니다. jq 답변은 이미 제공되었습니다. 이는 다음을 기반으로 한 대체 솔루션입니다.jtc
:
bash $ cat file.json | jtc -w'<KEY>l' -eu echo '"1234"' \;
{
"autorestart": true,
"cwd": "",
"env": {
"KEY": "1234",
"NODE_ENV": "desa"
},
"error_file": "/ofghfghgfh.log",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"merge_logs": true,
"name": "asdasd",
"out_file": "/fghgfhfgg",
"script": "dsad.js"
}
bash $