Tengo que ordenar la siguiente lista con un script de shell y hacer que la última versión aparezca en la parte inferior o superior. ¿Cómo haría eso solo con herramientas de shell?
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}enzsh. (cuando la lista está en la$arraymatriz).Respuestas:
GNU sort tiene
-Vque en su mayoría puede lidiar con una lista como esa ( detalles ):Sin embargo, esas
.rc*versiones podrían ser un poco problemático, ya que probablemente deberían clasificarse antes de la versión no rc correspondiente, si es que hay ambas, es decir. Algunos sistemas de versiones (como Debian), usan sufijos que comienzan con tilde (~) para marcar versiones preliminares, y se ordenan antes de la versión sin sufijo, que se clasifica antes que las versiones con otros sufijos. Aparentemente, esto es compatible al menossorten mi sistema, como se muestra arriba (sort (GNU coreutils) 8.23).fuente
-Vtambién soportado por defectosorten OpenBSD, pero no en NetBSD.Echa un vistazo a
sort -V:Los números de versión son bestias complicadas, con muy pocos estándares que rigen las porciones alfabéticas, pero intente esto en sus datos reales y vea si es suficiente.
fuente
mayorNumber–minorNumer some text, donde la clasificación de campos falla debido al delimitador Unicode. ¡Gracias por la pista!Esto se puede hacer como una línea, pero dividir en varias líneas (en las tuberías) aquí para facilitar la lectura, y también maneja las
rc's.Si no tiene una
-Vopción para su tipo, o incluso si la tiene, tendrá que lidiar con los ocasionalesrc:El primero
sedelimina los caracteres no numéricos.El
sortutiliza un.delimitador (-t.), ordenación numérica (-n) y teclas (-k).El último
sedvuelve a colocar los caracteres no numéricos.fuente
Gracias por toda la inspiración. ¿Puedo proponer mi propia respuesta? Se puede engañar al programa de clasificación para que haga lo que se necesita. Al final, se trata de agregar un cuarto número a la versión de 3 dígitos, ordenarlo y luego eliminarlo nuevamente. Funciona: la solución más simple hasta ahora, en mi humilde opinión.
resultado:
fuente
fuente