使用 bash 替换 - 动态值
replace using bash - Dynamic value
我有一个 Json 文件,其中包含以下值
cat file
{
"key1": "value1"
"key2": "value2",
}
我想更改 value1 和 value2。价值观是动态的,它会随着时间的推移而变化。我的 sed 应该可以使用任何值,并且我的查找应该是按键。
“
我的 sed 命令没有帮助。
sed -i 's/*\"key2\":*/\"key2\": "someothervalue2"/' file
你好像对正则表达式有点陌生,你的表达方式有一些问题。例如。匹配您使用 .
的任何字符,然后添加星号 (.*
) 以匹配它 0 次或更多次。您应该花一些时间来熟悉正则表达式,因为它将为您节省时间和将来的麻烦。
但为了达到预期的结果,我使用了这个命令:
sed -i -r 's/("key2" ?= ?).*,?/"someothervalue2",/' file
如果您要经常这样做,您应该将其放入脚本中,这样您就可以键入 ./myScript key new_value file
尝试使用 awk 解决方案一次。
awk ' ~ /key[12]/{match([=10=],/^ +/);printf substr([=10=],RSTART,RLENGTH);sub(/value[0-9]+/,"someothervalue2",);printf("%s%s",[=10=],RS);next} 1' Input_file
或
awk '
~ /key[12]/{
match([=11=],/^ +/);
printf substr([=11=],RSTART,RLENGTH);
sub(/value[0-9]+/,"someothervalue2",);
printf("%s%s",[=11=],RS);
next
}
1
' Input_file
输出如下:
{
"key1" = "someothervalue2"
"key2" = "someothervalue2",
}
如果您的 Input_file 中有多个 key1 和 key2,请将 key[12] 更改为 key[0-9]+,然后告诉我们进展如何。
您应该使用合适的 json-parser 而不是 sed
,例如jq
.
infile
{
"key1" : "value1",
"key2" : "value2"
}
您可以像这样替换它的值:
jq '.key1 = "foo" | .key2 = "bar"' < infile
输出:
{
"key1": "foo",
"key2": "bar"
}
我有一个 Json 文件,其中包含以下值
cat file
{
"key1": "value1"
"key2": "value2",
}
我想更改 value1 和 value2。价值观是动态的,它会随着时间的推移而变化。我的 sed 应该可以使用任何值,并且我的查找应该是按键。 “ 我的 sed 命令没有帮助。
sed -i 's/*\"key2\":*/\"key2\": "someothervalue2"/' file
你好像对正则表达式有点陌生,你的表达方式有一些问题。例如。匹配您使用 .
的任何字符,然后添加星号 (.*
) 以匹配它 0 次或更多次。您应该花一些时间来熟悉正则表达式,因为它将为您节省时间和将来的麻烦。
但为了达到预期的结果,我使用了这个命令:
sed -i -r 's/("key2" ?= ?).*,?/"someothervalue2",/' file
如果您要经常这样做,您应该将其放入脚本中,这样您就可以键入 ./myScript key new_value file
尝试使用 awk 解决方案一次。
awk ' ~ /key[12]/{match([=10=],/^ +/);printf substr([=10=],RSTART,RLENGTH);sub(/value[0-9]+/,"someothervalue2",);printf("%s%s",[=10=],RS);next} 1' Input_file
或
awk '
~ /key[12]/{
match([=11=],/^ +/);
printf substr([=11=],RSTART,RLENGTH);
sub(/value[0-9]+/,"someothervalue2",);
printf("%s%s",[=11=],RS);
next
}
1
' Input_file
输出如下:
{
"key1" = "someothervalue2"
"key2" = "someothervalue2",
}
如果您的 Input_file 中有多个 key1 和 key2,请将 key[12] 更改为 key[0-9]+,然后告诉我们进展如何。
您应该使用合适的 json-parser 而不是 sed
,例如jq
.
infile
{
"key1" : "value1",
"key2" : "value2"
}
您可以像这样替换它的值:
jq '.key1 = "foo" | .key2 = "bar"' < infile
输出:
{
"key1": "foo",
"key2": "bar"
}