我有一个具有以下值的Json文件
cat file
{
"key1": "value1"
"key2": "value2",
}
我想更改value1和value2。价值观是动态的,它会随着时间的推我的sed应该适用任何价值,而我的观点应该是关键。 " 我的sed命令没有帮助。
sed -i 's/*\"key2\":*/\"key2\": "someothervalue2"/' file
答案 0 :(得分:1)
尝试使用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
或强>
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",
}
如果你的Input_file中有多个key1和key2,那么将键[12]改为键[0-9] +,然后告诉我们它是如何进行的。
答案 1 :(得分:1)
您应该使用正确的json-parser而不是sed
,例如jq
。
infile中
{
"key1" : "value1",
"key2" : "value2"
}
您可以像这样替换它的值:
jq '.key1 = "foo" | .key2 = "bar"' < infile
输出:
{
"key1": "foo",
"key2": "bar"
}
答案 2 :(得分:0)
你似乎对正则表达式有些不熟悉,你的表达中有一些问题。例如。匹配您使用的任何字符.
,然后添加星标(.*
)以匹配它0次或更多次。你应该花一些时间熟悉正则表达式,因为它将为你节省时间和麻烦。
但为了达到预期的效果,我使用了这个命令:
sed -i -r 's/("key2" ?= ?).*,?/\1"someothervalue2",/' file
如果你打算这么做,你应该把它放到一个脚本中,这样你就可以输入./myScript key new_value file