Чи можна змінити порядок глобуса?


12

Я намагаюся показати всі екземпляри певного повідомлення з syslog у хронологічному порядку, роблячи щось на зразок наступного:

grep squiggle /var/log/messages*

На жаль, шаблон глобулів спочатку відповідає актуальному файлу. напр.

/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312

Це означає, що останні повідомлення відображаються спочатку, а за ними - хронологічні.

Чи можна якось відкоригувати поведінку шаблону, щоб порожній збіг (тобто просто messages) відображався в кінці списку?

Якщо ні, то який би був хороший спосіб вирішити цю проблему?


2
Ви можете змінити вихід, використовуючи tac: grep squiggle /var/log/messages* | tac...
pbm

Відповіді:


8

Я не знаю, як змінити порядок глобалізації, але для вашого випадку є легке вирішення:

grep squiggle /var/log/messages-* /var/log/messages

тобто не відповідають messagesфайлам у вашому глобальному шаблоні, і додайте їх до кінця grepсписку аргументів.


Дякую за це. Робила проблему складнішою, ніж мала бути!
Бурхан Алі

1
Або для додаткової вигадливості та меншої надмірності використовуйте grep squiggle /var/log/messages{-*,}. (Називається "розгортання дуги bash", якщо ви хочете перейти в Google).
Wildcard

11

У zsh ви можете контролювати порядок матчів (серед іншого) за допомогою глобального класифікатора .

echo /var/log/messages*        # usual lexicographic order
echo /var/log/messages*(On)    # reverse lexicographic order
echo /var/log/messages*(om)    # reverse chronological order (ascending mtime)
echo /var/log/messages*(Om)    # chronological order order (descending mtime)

(Для отримання додаткових можливостей див. Посібник.) Ви можете навіть визначити власний порядок сортування, надавши функцію порівняння в останніх версіях, з oeабо o+.

Тут правильний порядок файлів - це хронологічний порядок. Ви можете легко наслідувати його на основі імені, але це працює навіть у bash:

grep squiggle /var/log/messages{-*,}

Мені все більше імпонує zsh, чим більше я читаю про нього.
Бурхан Алі

Чи можу я отримати файли (по порядку) з zsh і передати їх назад до bash?
Wowfunhappy

@Wowfunhappy Так, але вам потрібно бути обережним, щоб правильно ставитись до спеціальних символів. Задайте нове запитання.
перестань бути злим"

2

Ви можете використовувати зворотні посилання в поєднанні з ls -tr (сортувати за часом моди та зворотно) таким чином:

grep squiggle `ls -tr /var/log/messages*`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.