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"
}
]
例如,
输入:
{
"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"
}
]