Estou tentando mostrar todas as instâncias de uma mensagem específica do syslog em ordem cronológica, fazendo algo como o seguinte:
grep squiggle /var/log/messages*
Infelizmente, o padrão glob corresponde primeiro ao arquivo ativo no momento. por exemplo.
/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312
Isso significa que as mensagens recentes aparecem primeiro, seguidas pelas mensagens históricas em ordem cronológica.
É possível ajustar o comportamento do padrão glob de alguma forma para fazer a correspondência vazia (ou seja, apenas messages
) aparecer no final da lista?
Caso contrário, qual seria uma boa maneira de resolver esse problema?
tac
:grep squiggle /var/log/messages* | tac
...Respostas:
Não sei como alterar a ordem de globbing, mas há uma solução fácil para o seu caso:
ou seja, não combine os
messages
arquivos no seu padrão glob e adicione-o ao final dagrep
lista de argumentos.fonte
grep squiggle /var/log/messages{-*,}
. (Chamado de "expansão de chave de bash", se você quiser pesquisá-lo no Google.) #No zsh, você pode controlar a ordem das correspondências (entre outras coisas) com um qualificador global .
(Consulte o manual para mais possibilidades.) Você pode até definir sua própria ordem de classificação, fornecendo uma função de comparação nas versões recentes, com
oe
ouo+
.Aqui, a ordem correta dos arquivos é a ordem cronológica. Você pode emulá-lo facilmente com base no nome, e isso funciona mesmo no bash:
fonte
Você pode usar backticks combinados com ls -tr (classifique por tempo de modificação e ao contrário) da seguinte maneira:
fonte