如何使用jq库在bash中用空格替换字符

时间:2017-02-18 20:02:55

标签: json regex bash shell jq

我正在使用jq命令将“value”替换为JSON文件中的相应“key”。 在以下代码段中,我必须替换JSON对象v中与密钥k对应的node值。

  jq --arg flag "$node" \
                   --arg temp  $v \
             '(.[$flag]|.['$k'])|=$temp' properties.json > tempprop.json

问题是如果已经存在一个值,那么我需要传递一个空字符串作为值。但jq解析器抛出异常说

jq: error: properties/0 is not defined at <top-level>, line 1:
properties.json

所以我不知道任何其他方式来处理这个问题,感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:2)

如果v是空字符串,则需要引用其扩展名。您也应该通过变量传递$k的值,而不是尝试插值。

jq --arg flag "$node" \
   --arg temp  "$v" \
   --arg k1 "$k" \
   '(.[$flag]|.[$k1])|=$temp' properties.json > tempprop.json

按原样,空$v&#34;的未加引号扩展消失&#34;,jq将过滤器视为该--arg选项的第二个参数,留下{{ 1}}被解释为过滤器。