제이슨. 뒤에 문장을 추가하는 방법: [닫기]

제이슨. 뒤에 문장을 추가하는 방법: [닫기]

다음은 내 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 $ 

관련 정보