我正在尝试获取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
答案 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变量。尽可能使用"
来避免这种情况,或者只是将变量连接到命令中,如上所示。