Je dois trier la liste suivante avec un script shell et faire apparaître la dernière version en bas ou en haut. Comment pourrais-je faire cela avec des outils shell uniquement?
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}
danszsh
. (lorsque la liste est dans le$array
tableau).Réponses:
Le tri GNU
-V
peut traiter principalement une liste comme celle-ci ( détails ):Cependant, ces
.rc*
versions pourraient être un peu problématiques, car elles devraient probablement être triées avant la version non rc correspondante, s'il y avait les deux, c'est-à-dire. Certains systèmes de version (comme Debian) utilisent des suffixes commençant par un tilde (~
) pour marquer les pré-versions, et ils trient avant la version sans suffixe, qui trie avant les versions avec d'autres suffixes. Apparemment, cela est pris en charge par au moins lesort
sur mon système, comme indiqué ci-dessus (sort (GNU coreutils) 8.23
).la source
-V
également pris en charge par défautsort
sur OpenBSD, mais pas sur NetBSD.Découvrez
sort -V
:Les numéros de version sont des bêtes compliquées, avec très peu de normes régissant les parties alphabétiques, mais essayez cela sur vos données réelles et voyez si c'est suffisant.
la source
mayorNumber–minorNumer some text
, où le tri des champs échoue à cause du délimiteur unicode. Merci pour l'astuce!Cela peut être fait en une seule ligne, mais divisé en plusieurs lignes (au niveau des tuyaux) ici pour plus de lisibilité, et gère
rc
également les.Si vous n'avez pas d'
-V
option pour votre tri, ou même si vous en avez, vous devrez vous occuper des occasionnelsrc
:La première
sed
supprime les caractères non numériques.La
sort
utilise un.
délimiteur (-t.
), un tri numérique (-n
) et des touches (-k
).La finale
sed
remet les caractères non numériques en place.la source
Merci pour toute l'inspiration - Puis-je proposer ma propre réponse: le programme de tri peut être amené à faire ce qui est nécessaire. En fin de compte, il s'agit d'ajouter un quatrième numéro au versioning à 3 chiffres, de le trier, puis de le supprimer à nouveau. Fonctionne - la solution la plus simple à ce jour, à mon humble avis.
résultat:
la source
la source