【发布时间】:2020-01-13 13:06:49
【问题描述】:
我有几个不同长度的数组,其中可能包含一个以foo 开头的元素(名称长度也不同),如果这个元素存在我想返回它,例如foo-f-o-o.
我知道如何检查它的存在,我成功测试了
{
"arr": [
"foo-f-o-o", "bar", "baz", "qux", "quux", "corge", "grault"
]
}
使用命令type file.json | jq ".arr|contains([\"foo\"])",我正确收到了true。
但是,我正在寻找这些步骤:
- 检测元素
foo*是否存在 - 如果是,则返回该元素的名称,在给定的情况下:
foo-f-o-o - 如果不是,返回
false
元素 foo.* 可以位于数组的任何位置,这意味着像 jq -r ".arr|.[0]" 这样的元素在这里不是一个选项。
有没有办法在 jq 中应用像 /^foo.*/ 这样的正则表达式来匹配值?
【问题讨论】:
-
供您考虑,这里有一个 alternative(即非 jq)解决方案,用于您的查询中的 JSON 操作,基于 unix walk-path 实用程序
jtc:<arr.json jtc -w'[arr]:<>i:<$0:false>f>^foo.*<R' -T'{{$0}}'。如果您有兴趣,我可以在单独的答案中详细说明该工具的使用(PS。我是该工具的开发人员)。
标签: arrays json batch-processing jq conditional-operator