使用 sed 查找给定正则表达式的值

using sed to find a value given a regex

我正在尝试从某些输出中获取值。假设我想要这个 json 对象的 id 属性:

{"id":123,"useless1":"uselessValue","useless2":uselessValue}

我试过这个:

a={"id":123,"useless1":"uselessValue","useless2":uselessValue}
echo $a | sed -e s/.*"id":(\d+).*//g

但是returns{"id":123,"useless1":"uselessValue","useless2":uselessValue}

我也试过了this example

如果我复制:

echo "12 BBQ ,45 rofl, 89 lol" | sed -e 's/.*(\d+) rofl.*//g'

我得到:

12 BBQ ,45 rofl, 89 lol

而不是45

我正在使用 MacOs High Sierra (10.13.6)

如果你使用jq,它会像

一样简单
jq '.id' file

如果您想修复 sed 命令,请确保在 RHS 中使用 BRE POSIX 兼容模式和 </code> 占位符:</p> <pre><code>sed -e 's/.*"id":\([0-9][0-9]*\).*//'

兴趣点:

  • 捕获组定义为 \(...\)
  • 一个或多个数字匹配[0-9][0-9]*