使用SED替换JSON密钥

时间:2017-03-16 11:07:14

标签: json string bash sed replace

我正在尝试获取JSON密钥并使用sed使用-i标志在文件中更改其属性。问题是,我不能正确使用这个正则表达式。它适用于简单的替换案例,但我无法使用此正则表达式工作。为简单起见,我刚尝试了一个简单的echo,而不是将其保存到文件中。想法?

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

3 个答案:

答案 0 :(得分:2)

为什么要让它与sed复杂化,只是做,

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

BTW 如果您的JSON输入可以通过jq进行解析和修改,那就去吧。仅使用 ONLY 作为最后的手段。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这很有效。提及'

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

'的字符串中不会替换Bash变量。尽可能使用"来避免这种情况,或者只是将变量连接到命令中,如上所示。