J'essaie de montrer toutes les instances d'un message particulier du syslog dans l'ordre chronologique en faisant quelque chose comme ceci:
grep squiggle /var/log/messages*
Malheureusement, le modèle glob correspond d'abord au fichier actuellement actif. par exemple.
/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312
Cela signifie que les messages récents apparaissent en premier, suivis des messages historiques dans l'ordre chronologique.
Est-il possible d'ajuster le comportement du motif global d'une manière ou d'une autre pour que la correspondance vide (c'est-à-dire juste messages
) apparaisse à la fin de la liste?
Sinon, quelle serait une bonne façon de résoudre ce problème?
tac
:grep squiggle /var/log/messages* | tac
...Réponses:
Je ne connais pas de moyen de modifier l'ordre de globbing, mais il existe une solution de contournement facile pour votre cas:
c'est-à-dire qu'ils ne correspondent pas aux
messages
fichiers de votre modèle global et les ajoutent à la fin degrep
la liste des arguments.la source
grep squiggle /var/log/messages{-*,}
. (Appelé "extension bash brace" si vous voulez le google.)Dans zsh, vous pouvez contrôler l'ordre des correspondances (entre autres) avec un qualificatif glob .
(Voir le manuel pour plus de possibilités.) Vous pouvez même définir votre propre ordre de tri en fournissant une fonction de comparaison dans les versions récentes, avec
oe
ouo+
.Ici, l'ordre correct des fichiers est l'ordre chronologique. Vous pouvez l'émuler facilement en fonction du nom, et cela fonctionne même dans bash:
la source
Vous pouvez utiliser des raccourcis combinés avec ls -tr (trier par heure de modification et en sens inverse) comme ceci:
la source