我在json结果集中有一个值,我想更改为原始值的子字符串值
{
"label": "web page check",
"target": "http://www.example.com/random/page"
},
{
"label": "web page check1 ",
"target": "http://www.example1.com/random/page"
},
我想做的就是将其返回为
{
"label": "web page check",
"target": "https://www.example.com"
},
{
"label": "web page check",
"target": "https://www.example1.com"
}
我尝试过
jq '.[].target=(match(^https:\/\/[0-9a-zA-z.]*|^http:\/\/[0-9a-zA-z.]*).string)'
jq -c '.[] | {label: .label, target: (.target |=match(^https:\/\/[0-9a-zA-z.]*|^http:\/\/[0-9a-zA-z.]*).string})'
答案 0 :(得分:0)
sub
的第一个参数(需要jq 1.5 )可以是任何PCRE。
.[].target |= sub("(?<=com).*$"; "")
答案 1 :(得分:0)
与使用capture
相比,使用match
通常更容易。在您的情况下,假设您的输入是按照代码段建议的方式排列的对象数组,则下面的内容足以修改“目标”值:
map(.target |= (capture("https?(?<s>://[^/]*)") | "https" + .s))
等效地:
map(.target |= sub( "https?(?<s>://[^/]*).*"; "https" + .s) )