我尝试在 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"
}
}
}
}
}