Вы можете использовать jq для сортировки строк номера версии.
Если строки являются «необработанными» строками, по одной на строку, то вы можете использовать эту программу jq:
def parse:
sub("alpha"; "alpha.")
| sub("beta"; "beta.")
| sub("gamma"; "gamma.")
| sub("prerelease"; "prerelease.")
| sub("debug"); "debug.")
| [splits("[-.]")]
| map(tonumber? // .) ;
[inputs]
| sort_by(parse)[]
Эта jq-программа может быть запущена так:
jq -nrR -f program.jq versions.txt
С примерами версий, это приведет к:
1.2.3.95
1.2.3.99
1.2.3.99-beta9
1.2.3.99-beta10
1.2.3.101
1.2.3.103
В вашем случае, результат может быть достигнут без повторного вызова jq, изменив вашу программу на использование parse
в соответствии с приведенными выше линиями. Основная часть программы jq, вероятно, будет выглядеть примерно так:
map(.props["nuget.version"]) | sort_by(parse)[]
(Конечно, опция -n необходима только при использовании inputs
для чтения.)
Самый высокий номер версии
Если (как указано в комментарии относится к делу) вы просто хотите получить наибольший номер версии, вы можете просто изменить окончательный []
на [-1]
:
... | sort_by(parse)[-1]