jq 在外部添加捕获组结果

jq add capturing group result outside

例如,

输入:

    {
       "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 并且值应该是没有数字的提取字符串。因此,输出应包含旧字段和新字段。

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"
  }
]