如何使用jq移除JSON数组的最后三个元素?
解决jq提取数组并移除最后三个元素的问题
你的问题出在两个关键点:
- 多余的
sort操作:版本号作为字符串排序时,字典序会打乱原有的版本顺序,比如2.9.10会排在2.9.7前面,导致后续切片结果完全不符合预期。 - 切片方向错误:
[:3]是取排序后数组的前3个元素,而这恰好是你需要移除的内容。
要保留原数组顺序并排除最后三个元素,直接使用负数索引切片即可,不需要排序:
输出每行一个元素
echo '{ "tags": [ "2.9.7", "2.9.8", "2.9.9", "2.9.10", "2.9.11", "2.9.12" ]}' | jq -r '.tags[:-3][]'
输出结果:
2.9.7 2.9.8 2.9.9
输出空格分隔的字符串
如果需要和你期望的格式一致(空格拼接),用join(" ")处理切片后的数组:
echo '{ "tags": [ "2.9.7", "2.9.8", "2.9.9", "2.9.10", "2.9.11", "2.9.12" ]}' | jq -r '.tags[:-3] | join(" ")'
输出结果:
2.9.7 2.9.8 2.9.9
补充说明
[:-3]表示从数组开头截取到倒数第3个元素之前(不包含倒数第3个),这个写法不受数组长度限制,不管数组有多少元素,都会自动去掉最后三个。
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

