Estoy tratando de mostrar todas las instancias de un mensaje particular del syslog en orden cronológico haciendo algo como lo siguiente:
grep squiggle /var/log/messages*
Desafortunadamente, el patrón global coincide primero con el archivo activo actualmente. p.ej.
/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312
Esto significa que los mensajes recientes aparecen primero seguidos de los mensajes históricos en orden cronológico.
¿Es posible ajustar el comportamiento del patrón global de alguna manera para que la coincidencia vacía (es decir, solo messages
) aparezca al final de la lista?
Si no, ¿cuál sería una buena manera de abordar este problema?
tac
:grep squiggle /var/log/messages* | tac
...Respuestas:
No conozco una forma de cambiar el orden global, pero hay una solución fácil para su caso:
es decir, no coincida con los
messages
archivos en su patrón global y agréguelo al final degrep
la lista de argumentos.fuente
grep squiggle /var/log/messages{-*,}
. (Llamado "expansión bash brace" si quieres googlearlo).En zsh, puede controlar el orden de las coincidencias (entre otras cosas) con un calificador global .
(Consulte el manual para obtener más posibilidades). Incluso puede definir su propio orden de clasificación proporcionando una función de comparación en versiones recientes, con
oe
oo+
.Aquí, el orden correcto de los archivos es el orden cronológico. Sin embargo, puedes emularlo fácilmente en función del nombre, y eso funciona incluso en bash:
fuente
Puede usar los backticks combinados con ls -tr (ordenar por tiempo de modificación y viceversa) de esta manera:
fuente