是否可以在jq
中打印比赛的开头和结尾上下文?
说我有以下JSON:
...
[{
"message": "Validating...",
},
{
"message": "Validated.",
},
{
"message": "Saving...",
},
{
"message": "Saved.",
}]
...
我希望能够在message=="Validating..."
处匹配一个字符串,然后从匹配项中获取下一个n
尾随或前导对象。
使用grep
,您可以使用-C
选项来获取上下文。 jq
中是否有类似内容?
答案 0 :(得分:2)
如果数组下的对象每个仅包含一个键-值对,请使用index
来获取匹配的索引:
index({message:"Validating"})
否则:
map(.message == "Validating...")|index(true)
或者使用此更有效的功能:
def find(condition):
label $out
| foreach .[] as $p (-1; . + 1
if $p | condition
then ., break $out
else empty end);
然后使用此索引对数组进行切片:
# all leading
.[0:find(.message == "Validating...")]
# all trailing
.[find(.message == "Validating..."):]
# leading three
find(.message == "Validating...") as $i | .[if $i < 3 then 0 else $i - 3 end:$i]
# trailing three
find(.message == "Validating...") as $i | .[$k:$k + 4]
# etc