jq 如果值包含则追加

jq if value contains then append

这可能不是解决此问题的理想方法,但我正在对某些 Grafana 仪表板进行批量更新。当 expr 键包含的值包含诸如“sum((rate”之类的内容时,我想在该值上附加另一个字符串。这甚至可能吗?

 if (.dashboard.panels[].targets[].expr | contains("sum((rate")) then . += "TEST" end'

我已经尝试了几种 then 动作的变体,甚至删除了连接以查看是否可以进行简单的替换。但是越来越

jq: error: syntax error, unexpected end (Unix shell quoting issues?) at <top-level>, line 1:

你总是需要一个 else 分支。为了便于阅读,您还可以将目标拉到前面(否则 . 将匹配之前的上下文)。

.dashboard.panels[].targets[].expr |=
  if contains("sum((rate") then . + "TEST" else . end

Demo

.dashboard.panels[].targets[].expr |= . +
  if contains("sum((rate") then "TEST" else "" end

Demo

您应该能够 update-assign 部分对象:

.dashboard.panels[].targets[].expr |= if contains("sum((rate") then . + "TEST" else . end

也可以不使用 if 条件,首先 selecting 所有有趣的路径,然后仅修改它们:

(.dashboard.panels[].targets[].expr | select(contains("sum((rate"))) += "TEST"