Muszę posortować poniższą listę za pomocą skryptu powłoki i sprawić, aby najnowsza wersja pojawiła się na dole lub na górze. Jak miałbym to zrobić tylko za pomocą narzędzi powłoki?
release-5.0.0.rc1
release-5.0.0.rc2
release-5.0.0
release-5.0.1
release-5.0.10
release-5.0.11
release-5.0.13
release-5.0.14
release-5.0.15
release-5.0.16
release-5.0.17
release-5.0.18
release-5.0.19
release-5.0.2
release-5.0.20
release-5.0.21
release-5.0.22
release-5.0.23
release-5.0.24
release-5.0.25
release-5.0.26
release-5.0.27
release-5.0.28
release-5.0.29
release-5.0.3
printf '%s\n' ${(on)array}
wzsh
. (gdy lista znajduje się w$array
tablicy).Odpowiedzi:
GNU sort ma,
-V
że może poradzić sobie z taką listą ( szczegóły ):Te
.rc*
wersje mogą jednak stanowić pewien problem, ponieważ prawdopodobnie powinny zostać posortowane przed odpowiednią wersją inną niż rc, jeśli tak się dzieje, to znaczy, że są obie. Niektóre systemy wersjonowania (takie jak Debian) używają sufiksów rozpoczynających się~
od znaku tyldy ( ) do oznaczania wersji wstępnych i sortują przed wersją bez sufiksu, który sortuje przed wersjami z innymi sufiksami. Najwyraźniej jest to obsługiwane przez co najmniejsort
w moim systemie, jak pokazano powyżej (sort (GNU coreutils) 8.23
).źródło
-V
domyślnie obsługiwany takżesort
w OpenBSD, ale nie w NetBSD.Sprawdź
sort -V
:Numery wersji to skomplikowane bestie, z bardzo nielicznymi standardami rządzącymi częściami alfabetycznymi, ale wypróbuj to na swoich rzeczywistych danych i sprawdź, czy to wystarczy.
źródło
mayorNumber–minorNumer some text
, gdzie sortowanie pól kończy się niepowodzeniem z powodu ogranicznika Unicode. Dziękuję za podpowiedź!Można to zrobić jako jedną linię, ale tutaj podzielono na wiele linii (na potokach), aby zapewnić czytelność i obsługuje
rc
's'.Jeśli nie masz takiej
-V
opcji, a nawet jeśli tak, będziesz musiał poradzić sobie z okazjonalnymirc
:Pierwszy
sed
usuwa znaki nienumeryczne.
sort
Używa.
ogranicznika (-t.
), sortowania numerycznego (-n
) i klawiszy (-k
). Ostatni
sed
umieszcza znaki nienumeryczne z powrotem na swoim miejscu.źródło
Dzięki za całą inspirację - mogę zaproponować własną odpowiedź: program sortowania można oszukać, aby zrobić to, co jest potrzebne. Na koniec chodzi o dodanie czwartej liczby do 3-cyfrowej wersji, posortowanie, a następnie usunięcie go ponownie. Działa - jak dotąd najprostsze rozwiązanie, IMHO.
wynik:
źródło
źródło