我有了下面的值更換使用bash - 動態值
cat file
{
"key1": "value1"
"key2": "value2",
}
我想改變值1和值2 JSON文件。價值是動態的,它隨時間變化。我的sed應該具有任何價值,我認爲應該是關鍵。 「 我sed的命令是沒有幫助。
sed -i 's/*\"key2\":*/\"key2\": "someothervalue2"/' file
我有了下面的值更換使用bash - 動態值
cat file
{
"key1": "value1"
"key2": "value2",
}
我想改變值1和值2 JSON文件。價值是動態的,它隨時間變化。我的sed應該具有任何價值,我認爲應該是關鍵。 「 我sed的命令是沒有幫助。
sed -i 's/*\"key2\":*/\"key2\": "someothervalue2"/' file
您應該使用合適的json解析器而不是sed
,例如, jq
。
INFILE
{
"key1" : "value1",
"key2" : "value2"
}
你可以這樣替換它的值:
jq '.key1 = "foo" | .key2 = "bar"' < infile
輸出:
{
"key1": "foo",
"key2": "bar"
}
你似乎與正則表達式比較陌生,也有你表達了一些問題。比如,以配合您使用.
任何字符,然後添加星號(.*
) 0次或多次匹配它你應該花一些時間來熟悉正則表達式,因爲這將時間和精力節省您在未來
但要達到預期的結果我用這個命令:。
sed -i -r 's/("key2" ?= ?).*,?/\1"someothervalue2",/' file
如果你打算這麼做,你應該把它寫成一個腳本,這樣你就可以輸入./myScript key new_value file
嘗試使用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] +,讓我們知道它是如何去做的。
你沒有任何':'你的輸入。更新你的問題 – RomanPerekhrest