【问题标题】:jq add capturing group result outsidejq 在外部添加捕获组结果
【发布时间】:2018-09-08 06:30:32
【问题描述】:

例如,

输入:

    {
       "id":"abc",
       "name": "name-middlenane-lastname-1"
    },

    {
        "id":"123",
        "name": "fname-flast-2"
    }

回复:

    {
         "id":"abc",
         "name": "name-middlename-lastname-1",
         "newkey": "name-middlename-lastname"
    },

    {
          "id":"123",
          "name": "fname-flast-2",
          "newkey": "fname-flast"
    }

每个对象中归档的name是一个字符串,字符和数字之间用"-"连字符分隔。我需要从开始到起始编号的完整字符串。我不想要数字后面的任何东西。然后添加 new 字段,键为 newkey 和 value 应该是没有数字的提取字符串。因此,输出应包含旧字段和新字段。

【问题讨论】:

  • @peak 有什么建议吗?
  • 为什么"name": "name-middlename-lastname-1", 在您的输出中保持不变?再次检查您的预期输出
  • @naveenkreddy - 请提供更精确的要求,例如如果name 是“123-ab456”或“a1b”怎么办?
  • @peak 和 RomanPerekhrest 进一步更新。现在清楚了吗?请指教,
  • 更新了问题陈述@peak & RomanPerekhrest

标签: json regex object jq capturing-group


【解决方案1】:

jq解决办法:

示例input.json:

[
  {
    "id": "abc",
    "name": "name-middlenane-lastname-1"
  },
  {
    "id": "123",
    "name": "fname-flast-2"
  }
]

jq 'map(. + (.name | capture("(?<newkey>.+)-[0-9]+")) )' input.json

输出:

[
  {
    "id": "abc",
    "name": "name-middlenane-lastname-1",
    "newkey": "name-middlenane-lastname"
  },
  {
    "id": "123",
    "name": "fname-flast-2",
    "newkey": "fname-flast"
  }
]

【讨论】:

猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 2016-05-30
  • 2019-02-20
  • 2012-03-04
  • 1970-01-01
  • 2012-08-20
  • 2012-04-11
  • 1970-01-01
相关资源
最近更新 更多