Я пытаюсь показать все экземпляры определенного сообщения из системного журнала в хронологическом порядке, выполнив что-то вроде следующего:
grep squiggle /var/log/messages*
К сожалению, шаблон glob сначала совпадает с текущим активным файлом. например.
/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312
Это означает, что последние сообщения отображаются первыми, а за ними следуют исторические сообщения в хронологическом порядке.
Можно ли как-то настроить поведение шаблона глобуса, чтобы пустое совпадение (т.е. просто messages
) отображалось в конце списка?
Если нет, то как бы решить эту проблему?
tac
:grep squiggle /var/log/messages* | tac
...Ответы:
Я не знаю, как изменить порядок заполнения, но для вашего случая есть простой обходной путь:
т.е. не сопоставляйте
messages
файлы в вашем шаблоне glob, и добавьте его в конецgrep
списка аргументов.источник
grep squiggle /var/log/messages{-*,}
. (Вызывается «расширение bash brace», если вы хотите, чтобы Google его.)В zsh вы можете управлять порядком совпадений (среди прочего) с помощью квалификатора glob .
(Дополнительные возможности см. В руководстве.) Вы даже можете определить свой собственный порядок сортировки, предоставив функцию сравнения в последних версиях с помощью
oe
илиo+
.Здесь правильный порядок файлов - это хронологический порядок. Вы можете легко эмулировать его, основываясь на названии, и это работает даже в bash:
источник
Вы можете использовать обратные пометки в сочетании с ls -tr (сортировка по времени мода и в обратном порядке) следующим образом:
источник