2017-08-15 47 views
0

我有了下面的值更換使用bash - 動態值

cat file 
    { 
    "key1": "value1" 
    "key2": "value2", 
    } 

我想改變值1和值2 JSON文件。價值是動態的,它隨時間變化。我的sed應該具有任何價值,我認爲應該是關鍵。 「 我sed的命令是沒有幫助。

sed -i 's/*\"key2\":*/\"key2\": "someothervalue2"/' file 
+1

你沒有任何':'你的輸入。更新你的問題 – RomanPerekhrest

回答

2

您應該使用合適的json解析器而不是sed,例如, jq

INFILE

{ 
    "key1" : "value1", 
    "key2" : "value2" 
} 

你可以這樣替換它的值:

jq '.key1 = "foo" | .key2 = "bar"' < infile 

輸出:

{ 
    "key1": "foo", 
    "key2": "bar" 
} 
0

你似乎與正則表達式比較陌生,也有你表達了一些問題。比如,以配合您使用.任何字符,然後添加星號(.*) 0次或多次匹配它你應該花一些時間來熟悉正則表達式,因爲這將時間和精力節省您在未來

但要達到預期的結果我用這個命令:。

sed -i -r 's/("key2" ?= ?).*,?/\1"someothervalue2",/' file 

如果你打算這麼做,你應該把它寫成一個腳本,這樣你就可以輸入./myScript key new_value file

0

嘗試使用awk解決方案一次。

awk '$1 ~ /key[12]/{match($0,/^ +/);printf substr($0,RSTART,RLENGTH);sub(/value[0-9]+/,"someothervalue2",$3);printf("%s%s",$0,RS);next} 1' Input_file 

OR

awk ' 
$1 ~ /key[12]/{ 
    match($0,/^ +/); 
    printf substr($0,RSTART,RLENGTH); 
    sub(/value[0-9]+/,"someothervalue2",$3); 
    printf("%s%s",$0,RS); 
    next 
} 
1 
' Input_file 

輸出將是如下:

 { 
    "key1" = "someothervalue2" 
    "key2" = "someothervalue2", 
    } 

如果你有超過鍵1和鍵2多地進入你的INPUT_FILE然後更改鍵[12]到按鍵[ 0-9] +,讓我們知道它是如何去做的。