【发布时间】:2021-04-05 15:55:04
【问题描述】:
我正在我的jq 查询中寻找一个正则表达式(使用。这是一个非常简单的表达式,我想匹配以数字\d(或[0-9])开头并以linux 结尾的条目。到目前为止我尝试过的:
versions=`echo $allversions| jq '.tags[] | select(startswith("\d")) | select(endswith("linux"))'`
但我不认为startwith 不支持正则表达式。我读到match 支持正则表达式,但我找不到有关它的适当文档或示例。一个简单的'jq '.tags[]| match("\d.*linux")' 不起作用并给出语法错误消息:
syntax error near unexpected token `"\d*linux"'
我怎样才能做到这一点?还是应该将jq 与sed 结合起来?
仅供参考:
$ jq --version
jq-1.6
【问题讨论】:
-
顺便说一句,
echo $allversions本身就是错误的。见I just assigned a variable, butecho $variableprints something else。总是,总是引用你的扩展:echo "$allversions"——看看如果你的JSON包含一个带有*的字符串被空格包围会发生什么(并且你正在使用一个符合POSIX的shell,特别是不 zsh)否则。 -
...也就是说
json='{"key": "this is * a string"}'; echo $json可以将当前目录下的文件列表注入到你的字符串中。 (不是不带引号的扩展会破坏字符串的唯一方式,而是一种更具戏剧性的方式)。