使用jq从数组中选择特定项目

时间:2018-12-28 13:03:37

标签: json linux shell jq

我有这个json字符串:

{
    "head": {
        "url": "foobar;myid=E50DAA932C22739F92BB250C14365440"
    }
}

在外壳上使用jq时,我得到url的内容作为数组:

jq -r '.head.url | split(";")[] '

这将返回:

foobar
myid=E50DAA932C22739F92BB250C14365440

我的目标是仅在=之后获得ID(E50DA ...)。我可以简单地使用[1]获取第二个元素,然后使用正则表达式获取=之后的部分。 但是元素的顺序并不安全,我敢肯定,jq已经有了更好的方法,我不知道。也许创建元素的映射并使用myid作为获取值(E50 ...)的键?

谢谢您的输入!

2 个答案:

答案 0 :(得分:1)

使用jq的{​​{1}}后向积极态度来输出match()之后的内容:

myid=

或将$ jq -r '.head.url | split(";")[] | match("(?<=myid=).*;"g").string' file E50DAA932C22739F92BB250C14365440 split()放在match()之后,直到结尾或myid=

;

答案 1 :(得分:0)

您是否只需要使用jq?您可以使用grepcut进一步处理输出:

jq '.head.url | split(";")[]' | grep '^myid=' | cut -d= -f2