regex 使用JQ和正则表达式提取匹配的正则表达式字符串

u7up0aaq  于 2023-10-22  发布在  其他
关注(0)|答案(3)|浏览(120)

我从curl命令中获得了以下输入json,并将其输入到jq。

{
  "version": "14.10.0-ee",
  "revision": "ad109bc62af"
}

我尝试使用jq来提取'14.10.0'。
我有下面的jq命令,但它只是返回“14.10.0-ee”

jq '. | select(.version|capture("^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}")).version'

我看了这里的jq文档,但我无法找到正确的语法。我试过扫描、捕获和匹配,但没有成功。
如果我将结果传递给grep,我就可以实现我想要的,但我更喜欢在一个命令中完成所有这些。
任何帮助将不胜感激。

uqjltbpv

uqjltbpv1#

但您可以通过**[[:digit:].]+模式使用capture**

jq -r '.version| capture("(?<v>[[:digit:].]+)").v'

Demo

au9on6nz

au9on6nz2#

你可以在连字符上进行分割,然后取第一个元素:

.version|split("-")|first

.version/"-"|first

/在字符串上相当于调用split)
使用 raw output 的标志-r调用jq,即字符串之间没有引号。

dpiehjr4

dpiehjr43#

.version|scan("^[^-]+")

.version|scan("^[0-9.]+")

不要把它复杂化;)
使用 raw output 的标志-r调用jq,即字符串之间没有引号。

相关问题