使用SED替换JSON键

使用SED替换JSON键,json,string,bash,sed,replace,Json,String,Bash,Sed,Replace,我正在尝试获取一个JSON密钥,并使用sed的-I标志更改其在文件中的属性。问题是,我不能正确使用这个正则表达式。对于简单的replace用例,它工作得非常好,但是我无法使用这个正则表达式使它工作。为了简单起见,我只是尝试了一个简单的echo,而不是将其保存到文件中。想法 x=0.0.179 echo "version: 0.0.178" | sed 's/^[ ]*\"version\"[ ]*:[ ]*\"\([0-9]+\.[0-9]+\.[0-9]+\)\".*$/\$x/

我正在尝试获取一个JSON密钥,并使用sed的
-I
标志更改其在文件中的属性。问题是,我不能正确使用这个正则表达式。对于简单的replace用例,它工作得非常好,但是我无法使用这个正则表达式使它工作。为了简单起见,我只是尝试了一个简单的echo,而不是将其保存到文件中。想法

 x=0.0.179     
 echo "version: 0.0.178" | sed 's/^[ ]*\"version\"[ ]*:[ ]*\"\([0-9]+\.[0-9]+\.[0-9]+\)\".*$/\$x/'
 0.0.178

你为什么要用sed使事情复杂化呢

x="0.0.179"
echo "version: 0.0.178" | sed  "s/version: .*/version: $x/"
version: 0.0.179

BTW
如果您的
JSON
输入可以通过
jq
进行解析和修改,那么就开始吧。仅将此作为最后手段。

为什么要使用
sed使其复杂化呢

x="0.0.179"
echo "version: 0.0.178" | sed  "s/version: .*/version: $x/"
version: 0.0.179

BTW
如果您的
JSON
输入可以通过
jq
进行解析和修改,那么就开始吧。这只能作为最后的手段。

我认为您的sed regexp正在寻找双引号内的版本号。您在上面对sed的输入没有被引用,因此不会被替换(我希望您的JSON会被双引号引用,因此我对您真正的JSON输入感兴趣)。

我认为您的sed regexp正在寻找双引号中的版本号。您对上面sed的输入没有被引用,因此不会被替换(我希望您的JSON会被双引号引用,因此我对您真正的JSON输入感兴趣)。

这是有效的。在
$x

echo "version: 0.0.178" | sed 's/^[ ]*\"version\"[ ]*:[ ]*\"\([0-9]+\.[0-9]+\.[0-9]+\)\".*$/\'$x'/'

Bash变量不会在字符串中被替换为
。尽可能使用
来避免这种情况,或者如上图所示将变量输入到命令中。

这是有效的。请在
$x附近提及
'
s

echo "version: 0.0.178" | sed 's/^[ ]*\"version\"[ ]*:[ ]*\"\([0-9]+\.[0-9]+\.[0-9]+\)\".*$/\'$x'/'

Bash变量不会在字符串中被替换为
。尽可能使用
来避免这种情况,或者如上图所示将变量导入到命令中。

您的JSON是什么,您期望得到什么,以及您实际得到什么?如果您试图编辑JSON,有相应的工具(例如
jq
)。使用sed的方法可能会在某个时候被打破。@brian我认为我的问题很好地解释了这种期望。我希望将0.0.178替换为0.0.179。我只限于sed,所以我不能使用jq。有没有一种方法可以用sed来实现?有没有理由不安装jq?你的服务器没有安装Python吗?你的JSON是什么,你期望得到什么,你实际得到什么?如果你试图编辑JSON,有一些工具(例如
jq
)。使用sed的方法可能会在某个时候被打破。@brian我认为我的问题很好地解释了这种期望。我希望将0.0.178替换为0.0.179。我只限于sed,所以我不能使用jq。有没有一种方法可以用sed来实现?有没有理由不安装jq?您的服务器没有安装Python吗?这是一个非常可靠的答案。如果在表达式中包含任何反斜杠,则将sed与双引号表达式一起使用是困难的。有关详细信息,请参阅。我完全同意:在sed中使用
是一种不好的做法。这是一个非常可靠的答案。如果在表达式中包含任何反斜杠,则将sed与双引号表达式一起使用是困难的。有关详细信息,请参阅。我完全同意:在sed中使用
是一种不好的做法。是的,也可以将其缩短。但是我试着回答这个具体的问题。是的,你也可以把这个缩短。但我试图回答这个具体的问题。