我有一个json对象,其中一个字段具有值,例如" 国家/地区 - sapi
- 1.0
"," 库存列表 - api
- 1.0-snapshot
"
Noe,第一个人sapi
而另一个人api
。
使用jq
,我如何获得countries-sapi或inventory-list-api我的意思是版本之前的任何内容。版本可以像1.0
或1.0.1-snapshot
等一样简单。
答案 0 :(得分:0)
我是命令行工具JQ的新手但是试图帮助你......
输入:“countries-sapi-1.0”
Use : .[] | match( "\\d"; "ig") will give you the following output
{
"offset": 15,
"length": 1,
"string": "1",
"captures": []
}
{
"offset": 17,
"length": 1,
"string": "0",
"captures": []
}
Use first object's offset value and try to slice it from starting position to the received offset.
slice from beginning $ jq -c '.[:15]'
In our case we got 15 as offset for first object so we used :15 for slice.
Hope so this will help you.
答案 1 :(得分:0)
看起来你需要研究正则表达式(正则表达式);例如,请参阅https://regexone.com/或https://github.com/zeeshanu/learn-regex或其他几十个。
使用jq,在您的特定情况下,您可以从:
开始sub(" *- *[0-9]+\\.[0-9]+.*$"; "")
请注意,此处需要两个反斜杠,因为“from”表达式必须(或评估为)有效的JSON字符串。
答案 2 :(得分:0)
我在这里搜索如何用正则表达式而不是jq
中的子字符串进行拆分,但是我发现您必须为split
函数提供两个参数(其中第二个参数包含用于正则表达式,但它只能是一个空字符串。
$ jq -n '"axxbxxxc"|split("x+";"")'
[
"a",
"b",
"c"
]
从手册:
split
Splits an input string on the separator argument.
jq 'split(", ")'
"a, b,c,d, e, "
=> ["a","b,c,d","e",""]
[...]
split(regex; flags)
For backwards compatibility, split splits on a string, not a regex.