這就是我在自定義 docker 注冊表中獲取影像的所有版本標簽的方式:
r=`curl -sS "$registry/v2/" \
-o /dev/null \
-w '%{http_code}:%header{www-authenticate}'`
http_code=`echo "$r" | cut -d: -f1`
curl_args=(-sS -H 'Accept: application/vnd.docker.distribution.manifest.v2 json')
curl_args =(-u "$creds")
tags=`curl "${curl_args[@]}" "$registry/v2/$image/tags/list" | jq -r .tags[] | sort -V`
結果可能是這樣的:
1.0.0
1.1.2
1.2.0
1.2.1
1.0.1
1.1.0
1.1.1
1.2.1
現在我只想獲取除最新的三個標簽之外的所有標簽,如果標簽少于三個,則結果應該為空。所以在這個例子中我需要得到
1.0.0
1.0.1
1.1.0
1.1.1
1.1.2
我嘗試使用unset $tags[-3],但我想我沒有得到最后一次 curl 呼叫回傳的陣列。那么sort -V使用這種語法真的有用嗎?
uj5u.com熱心網友回復:
sort在 jq 中使用,然后使用索引:獲取范圍(負索引從末尾開始計數)。
jq -r '.tags | sort[:-3][]'
您可以通過在點處拆分版本字串并將專案轉換為數字來模擬版本排序(適用于示例中給出的版本字串型別)。
jq -r '.tags | sort_by(./"." | map(tonumber))[:-3][]'
輸出:
1.0.0
1.0.1
1.1.0
1.1.1
1.1.2
uj5u.com熱心網友回復:
使用 GNU coreutils:
echo "$data" | sort -V | head -n -3
1.0.0
1.0.1
1.1.0
1.1.1
1.1.2
-V是“版本排序”
-n帶有否定引數的是“列印除最后NUM行之外的所有內容”
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535674.html
標籤:狂欢壳jq
