Jq 使用包含多个匹配条件

mac*_*ian 1 jq

我有一个包含多个对象 ID 的 json 文件,我需要一个根据命名约定排除不同 ID 的查询。这些本质上是“或”。我以为我已经有了这个查询,但它们仍然出现在输出中。

如果我单独与它们一起运行查询,我可以让它工作,但我需要添加一个大列表。

作品

cat file.json | jq '.interface[] | select(.description | contains ("VLL") | not )'
Run Code Online (Sandbox Code Playgroud)

不工作

cat file.json | jq '.interface[] | select(.description | contains ("VLL"|"2002089"|"otherstuff" ) | not )'
Run Code Online (Sandbox Code Playgroud)

我尝试了几种使用逗号和引用的不同方法,但没有成功。

我离得还远吗?

我还计划在 bash 脚本中运行它,如果有帮助的话(可能会变得更糟)

谢谢

pea*_*eak 6

我离得还远吗?

如果使用test/1代替contains,并进行相应调整,则不会:

.interface[]
| select(.description | test ("VLL|2002089|otherstuff" ) | not )
Run Code Online (Sandbox Code Playgroud)

test 的参数被解释为正则表达式。当然还有其他选择,但如果使用正则表达式合适,那么test就合适。

字符串黑名单

如果您有字符串黑名单并希望使用字符串相等性作为标准,请考虑:

["VLL","2002089","otherstuff"] as $blacklist
| .interface[]
| select(.description | IN($blacklist[]) | not)
Run Code Online (Sandbox Code Playgroud)