2017-02-18 54 views
0

我正在使用jq命令替換JSON文件中相應「鍵」的「值」。 在下面的代碼片段中,我必須替換對應於JSON對象node中的密鑰kv的值。如何使用jq庫替換bash中的空格字符

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 

所以我不知道任何其他方式來解決這個問題,感謝任何形式的幫助。

感謝。

回答

2

如果v是一個空字符串,則需要引用其擴展。你也應該通過一個變量來傳遞$k的值,而不是嘗試插入它。

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

AS是,空的$v未引用的膨脹「消失」,並且jq看到過濾器作爲第二個參數到--arg選項,留下properties.json被解釋爲過濾器。

+0

非常感謝..它解決了我的問題.. Kudos –

相關問題