我有这样的 jq 命令:
jq --arg ts "$TS" '.Date = $ts, .Marker.Date = $ts, .InfoFromTerminator.Timestamp = $ts'
但它似乎只替换了最后一项,保持前两项不变。如何重写查询以替换所有 3 个参数?
逗号是
jq
中的运算符:
甚至逗号运算符也是一个生成器,首先生成值 由逗号左侧的表达式生成,然后对于每个 这些值由右侧的表达式生成 逗号。
可以通过从一个过滤器/分配到下一个过滤器/分配的管道来更改多个元素,如下所示:
jq --arg ts "$TS" '.Date = $ts | .Marker.Date = $ts | .InfoFromTerminator.Timestamp = $ts'
您还可以使用逗号将属性集合分配给相同的值:
jq --arg ts "$TS" '(.StartDate, .EndDate) = $ts'
这将获取左侧的路径引用列表并将它们全部更新为新值。当右侧表达式不仅仅是一个简单变量时,这会很有用。
示例:
$ jq '(.a, .b) = "new value"' <<< '{"a": "a", "b": "b", "c": "c"}'
{
"a": "new value",
"b": "new value",
"c": "c"
}