Ich muss die folgende Liste mit einem Shell-Skript sortieren und die neueste Version oben oder unten anzeigen. Wie würde ich das nur mit Shell-Tools machen?
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}
inzsh
. (Wenn sich die Liste im$array
Array befindet).Antworten:
GNU sort hat,
-V
dass meistens mit einer Liste wie dieser umgehen kann ( Details ):Diese
.rc*
Versionen könnten jedoch ein kleines Problem darstellen, da sie wahrscheinlich vor der entsprechenden Nicht-RC-Version sortiert werden sollten , wenn es also zufällig beides gibt. Einige Versionsverwaltungssysteme (wie Debian) verwenden Suffixe, die mit tilde (~
) beginnen, um Vorabversionen zu kennzeichnen, und sortieren vor der Version ohne Suffix, die vor Versionen mit anderen Suffixen sortiert wird. Anscheinend wird dies zumindestsort
von meinem System unterstützt, wie oben gezeigt (sort (GNU coreutils) 8.23
).quelle
-V
wird standardmäßig auchsort
unter OpenBSD unterstützt, jedoch nicht unter NetBSD.Auschecken
sort -V
:Versionsnummern sind komplizierte Biester, mit sehr wenigen Standards, die die alphabetischen Teile regeln, aber probieren Sie dies an Ihren tatsächlichen Daten aus und prüfen Sie, ob es ausreicht.
quelle
mayorNumber–minorNumer some text
, bei dem die Feldsortierung aufgrund eines Unicode-Trennzeichens fehlschlägt. Danke für den Hinweis!Dies kann als eine Zeile erfolgen, wird hier jedoch aus Gründen der Lesbarkeit in mehrere Zeilen (an den Pipes) aufgeteilt und behandelt auch die
rc
.Wenn Sie keine
-V
Option für Ihre Sortierung haben oder auch wenn Sie dies tun, müssen Sie sich mit den folgenden Situationen befassenrc
:Das erste entfernt
sed
die nicht-numerischen Zeichen.Das
sort
verwendet ein.
Trennzeichen (-t.
), eine numerische Sortierung (-n
) und Tasten (-k
).Das letzte
sed
setzt die nicht-numerischen Zeichen zurück.quelle
Vielen Dank für all die Inspiration - Darf ich meine eigene Antwort vorschlagen: Das Sortierprogramm kann dazu verleitet werden, das zu tun, was benötigt wird. Am Ende geht es darum, der dreistelligen Versionierung eine vierte Zahl hinzuzufügen, sie zu sortieren und dann wieder zu entfernen. Funktioniert - bisher einfachste Lösung, IMHO.
Ergebnis:
quelle
quelle