쉘을 사용하여 json 파일의 상당 부분을 찾아 교체해야 합니다. 예를 들어 다음 파일이 있습니다.
{
"Balise1": true,
"Balise2": true,
"OtherThingEnabled": false,
"proxySettings": {
"port": 0
},
"mailSettings": {},
"maxRunningActivitiesPerJob": 5,
"maxRunningActivities": 5,
}
괄호 안의 내용을 지워야 합니다."프록시 설정"다음으로 교체하세요.
"proxySettings": {
"host": "my-proxy.host.com",
"port": 80
}
파일 시작 부분에 몇 줄이 있는지 확인할 수 없습니다. 하나일 수도 있고, 여러 개일 수도 있고, 없을 수도 있습니다. 내가 확신하는 유일한 것은 괄호뿐입니다. 올바르게 들여쓰기가 필요합니다.
redex를 사용하여 sed 함수를 살펴봤지만 알 수 없는 행 수에 부딪혔습니다.
도울 수 있니? 감사해요
답변1
JSON 프로세서 사용 jq
(입력은 유효한 JSON이지만 게시된 문서에는 후행 쉼표가 포함되어 있으므로 유효한 JSON이 아니라고 가정):
jq '.proxySettings = { host: "my-proxy.host.com", port: 80 }' file.json
그러면 proxySettings
섹션이 지정된 값으로 설정되어 이전에 해당 키와 연결된 다른 값(있는 경우)을 덮어씁니다.
명령줄에서 두 개의 값을 전달하려면(아마도 셸 변수에서) 다음을 사용하세요.
myproxy=my-proxy.host.com
myport=80
jq --arg host "$myproxy" --argjson port "$myport" '.proxySettings = { host: $host, port: $port }' file.json
또는 더 짧음
myproxy=my-proxy.host.com
myport=80
jq --arg host "$myproxy" --argjson port "$myport" '.proxySettings = $ARGS.named' file.json
마지막 변형은 두 개의 키 와 명령줄에 제공된 값을 포함하는 내부 jq
객체를 생성합니다. 이 개체는 입력 문서의 섹션에 할당됩니다.$ARGS.named
host
port
proxySettings
--arg
호스트 이름과 포트 번호를 사용하는 이유 --argjson
는 호스트 이름은 JSON 문자열로 인코딩해야 하는 문자열이지만 포트 번호는 JSON 문자열로 인코딩하면 안되는 숫자 값이기 때문입니다.
모든 경우에 결과는 표준 출력에 기록됩니다. 새 파일 이름으로 리디렉션하거나 파이프를 통해 sponge file.json
원본 파일을 출력으로 덮어쓰세요.