如何使用JQ实现Semver版本筛选及灵活条件切换?
使用JQ内置方法筛选语义化版本对象
JQ可以通过内置的split和tonumber方法将字符串格式的语义化版本号转换为数字数组,利用数组的自然比较实现版本筛选,完全无需正则,且条件切换非常灵活。
1. 筛选版本等于"1.2.0"的对象
将版本号按.分割后转成数字数组,直接和目标版本的数字数组做相等判断:
.[] | select(.version | split(".") | map(tonumber) == [1,2,0])
执行后会输出所有版本严格等于1.2.0的对象(你的示例数据中无匹配结果)。
2. 筛选版本大于"1.2.7"的对象
利用JQ的数组比较逻辑(元素依次对比,直到找到第一个不同值),直接判断版本数组是否大于目标数组:
.[] | select(.version | split(".") | map(tonumber) > [1,2,7])
针对你的示例数据,执行后会输出以下结果:
{ "id": 1, "version": "2.3.4" }, { "id": 2, "version": "1.4.4" }, { "id": 4, "version": "1.3.4" }
灵活切换筛选条件
只需修改命令中对比的数字数组即可:
- 筛选版本小于"1.4.0":将条件改为
< [1,4,0] - 筛选版本大于等于"1.3.0":将条件改为
>= [1,3,0]
内容的提问来源于stack exchange,提问作者Matias Barrios
相关产品推荐
相关产品推荐

