【发布时间】:2020-12-17 09:29:24
【问题描述】:
TL;DR
下面的命令中jq相当于grep '"\/v6'是什么意思;
jq '.. .pattern? // empty' /tmp/all.json | grep '"\/v6'
考虑下面的json;
{
"payload": {
"groups": [
{
"pattern": "/v6/",
"groups": [
{
"pattern": "something/",
"groups": [
{
"pattern": "somethingElse/",
"groups": [
{
"pattern": "{specialPattern:[0-9]+}/",
"groups": [],
"routes": [
{
"type": "variable",
"pattern": "/v6/notImportant/{specialPattern:[0-9]+}/",
"methods": {
json文件比较大,有很多不相关的数据
我正在尝试捕获 json 文件中的所有 .pattern based on this question 我创建了以下 jq 命令:
jq '.. .pattern? // empty' /tmp/all.json
这按预期工作,创建与此类似的输出;
"/v6/"
"something/"
"somethingElse/"
"{specialPattern:[0-9]+}/"
"/v6/notImportant/{specialPattern:[0-9]+}/"
问题:我如何仅选择以/v6/ 开头的每个.pattern?
我已经像这样使用grep了
jq '.. .pattern? // empty' /tmp/all.json | grep '"\/v6'
但是,必须有一个jq-only 解决方案。
Google 教了我关于 jq 的 contains 这似乎是某种相关问题的答案;
- How to filter an array of objects based on values in an inner array with jq?
- filter on "string contains"
- Print array element if it contains
不幸的是,我无法让它适应我的情况,因为使用 select 似乎没有必要。
【问题讨论】: