Json 파일에 Raid 정보 구조에 대한 기록을 추가하려고 합니다.
jq '.raid.c0.e252.s0 +={"device": "/c0/e252/s0"}' file.json
하지만 두 가지 오류가 있습니다.
jq: error: Invalid numeric literal at EOF at line 1, column 5 (while parsing '.e252') at <top-level>, line 1:
.raid.c0.e252.s0 +={"device": "/c0/e252/s0"}
jq: error: syntax error, unexpected LITERAL, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.raid.c0.e252.s0 +={"device": "/c0/e252/s0"}
jq: 2 compile errors
몇 가지 테스트를 거친 후 필드 이름에 문제가 있다는 것을 이해했습니다. 당연히 e<number>
받아들여지지 않습니다. 실제로 다음을 사용하십시오.
jq '.raid.c0.p252.s0 +={"device": "/c0/e252/s0"}' file.json
또는
jq '.raid.c0.eid252.s0 +={"device": "/c0/e252/s0"}' file.json
두 경우 모두 예상된 결과를 얻습니다.
{
"raid": {
"c0": {
"eid252": {
"s0": {
"device": "/c0/e252/s0"
}
}
}
}
}
분명히 큰 문제는 아닙니다. 어떤 필드 이름이든 사용할 수 있지만 장치 이름으로 /c0/e252/s0
쿼리를 시작하는 것이 더 간단할 것입니다..c0.e252.s0
jq 버전은 1.6인데 공식 저장소에 버전을 유지하고 싶습니다.
이 문제에 대한 해결책을 아는 사람이 있나요?
감사해요
답변1
e252
이 문제는 값을 구문 분석하는 방식 으로 인해 발생합니다 .
지수( e252 = 10^252
)로 처리되지만 이 표기법에는 선행 숫자(예: )가 필요합니다 1e252 = 1x10^252
. 예기치 않은 형식 지정으로 인해 "잘못된 숫자 리터럴" 구문 분석 오류가 발생합니다.
분명히 문자열 리터럴을 찾고 있으므로 e252
목적을 달성하려면 다음을 사용할 수 있어야 합니다.
jq '.raid.c0."e252".s0 +={"device": "/c0/e252/s0"}' < file.json
이것은 만든다:
{
"raid": {
"c0": {
"eid252": {
"s0": {
"device": "/c0/e252/s0"
}
},
"e252": {
"s0": {
"device": "/c0/e252/s0"
}
}
}
}
}