我们只想捕获参数-segment.bytes
及其值
例子
echo "$info" | grep "segment.bytes"
{"version":1,"config":{"segment.bytes":"10737555","retention.bytes":"104857600"}}
我认为是删除所有单词,直到segment.bytes
并减少segment.bytes
包含值而不包含双引号
预期结果的例子
echo "$info" | grep "segment.bytes" | ......
segment.bytes:10737555
我尝试这个
echo "$info" | grep "segment.bytes" | sed s'/"/ /g' | sed 's/^.*segment.bytes/segment.bytes/' | awk '{print $1":"$3}
我得到
segment.bytes:10737555
但是我觉得我的方法可能很危险,因为获得价值的结果非常敏感而且很重要,得出错误的结果可能会带来灾难性的后果
我很乐意获得其他更可靠的选择
您可以尝试通过以下管道传递$info
变量sed
:
echo "$info" | sed -E '/"segment\.bytes"/s/.*"(segment\.bytes)":"([^"]+)".*/\1:\2/'
它将查找具有该模式的一行,并将字符串和以下括号中的字符串(为简单起见定义为“除”以外的任何内容)"segment.bytes"
提取到捕获组1和2中,并打印“捕获组1”,“:”,和“捕获组2”。segment.bytes
"
(请注意,激活扩展正则表达式的选项可能会因您的sed
版本而异。-E
现在是POSIX标准,并且可以在当前的GNU,MacOS和BSD上运行sed
,但是如果失败,请参阅手册页以了解如何激活ERE)
为了更具选择性,请尝试
sed -E '/"segment\.bytes":"[0-9]+"/s/.*"(segment\.bytes)":"([0-9]+)".*/\1:\2/'
在行搜索和值捕获部分中,该值将只接受一个整数值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句