jq if value包含then追加



这可能不是理想的方法,但我正在批量更新一些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

演示

最新更新