【问题标题】:JQ - How to define filter to remove brackets, quotes and commas from output arrayJQ - 如何定义过滤器以从输出数组中删除括号、引号和逗号
【发布时间】:2020-02-22 06:41:20
【问题描述】:

我需要将输出数组转换为不带括号、引号和逗号的行,以便它可以用于创建 git 克隆。

这是我原来的查询

curl -s http://bitbucketlocalserver:7990/rest/api/1.0/projects/PROJECT_NAME/repos?per_page=20 ^
-u user:pass | H:\Downloads\Win64\jq-win64.exe -r "[.values[] | ((.links.clone[] | select(.name==\"http\") | .href)  + \" \" +  .name)]"  

返回格式的输出

[
   "http://bitbucketlocalserver:7990/scm/PROJECT_NAME/gitrepo1.git GitRepository1",
   "http://bitbucketlocalserver:7990/scm/PROJECT_NAME/gitrepo1.git GitRepository2"
]

我想将输出用作另一个命令的输入,如下所示

 curl -s http://bitbucketlocalserver:7990/rest/api/1.0/projects/PROJECT_NAME/repos?per_page=20 ^
-u user:pass | H:\Downloads\Win64\jq-win64.exe -r "[.values[] | ((.links.clone[] | select(.name==\"http\") | .href)  + \" \" +  .name)]"   | ^
 H:\Utilities\Git\usr\bin\xargs.exe -n 2 git clone -b release-dev

为了能够使用这个命令,jq命令的输出需要是这样的

http://bitbucketlocalserver:7990/scm/PROJECT_NAME/gitrepo1.git GitRepository1
http://bitbucketlocalserver:7990/scm/PROJECT_NAME/gitrepo1.git GitRepository2

第一部分是this link的一部分

我需要对 JQ 过滤器进行哪些更改才能执行此操作?实际上,我需要从 BitBucket 项目中克隆 40 多个存储库,并且我想创建一个不需要先获取列表的简单脚本。

【问题讨论】:

    标签: git output jq xargs


    【解决方案1】:

    您可以简单地将以下 jq 过滤器附加到生成两个字符串数组的过滤器:

    .[]
    

    或者更经济,只需从 jq 查询中删除外部方括号。

    关键在于 -r 选项仅去除 JSON 字符串(不是复合实体中的字符串)输出上的双引号。

    【讨论】:

    • 我的过滤器是[...]|sort,所以无法删除外部方括号,这非常有用
    • @MiserableVariable - 在您的情况下,您可以使用缩写 [...]|sort[]
    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多