这可能不是理想的方法,但我正在批量更新一些Grafana仪表板。当expr键包含的值包含类似于"sum((rate")我想给这个值附加另一个字符串。这可能吗?
if (.dashboard.panels[].targets[].expr | contains("sum((rate")) then . += "TEST" end'
我已经尝试了一些变化,然后行动,甚至删除连接,看看我是否可以得到简单的替换。但
jq: error: syntax error, unexpected end (Unix shell quoting issues?) at <top-level>, line 1:
你应该能够更新分配你的部分对象:
.dashboard.panels[].targets[].expr |= if contains("sum((rate") then . + "TEST" else . end
也可以不使用if
条件,首先选择所有感兴趣的路径,然后只修改它们:
(.dashboard.panels[].targets[].expr | select(contains("sum((rate"))) += "TEST"
您总是需要一个else
分支。为了可读性,您还可以将目标拉到前面(否则.
将匹配先前的上下文)。
.dashboard.panels[].targets[].expr |=
if contains("sum((rate") then . + "TEST" else . end
演示.dashboard.panels[].targets[].expr |= . +
if contains("sum((rate") then "TEST" else "" end
演示