список специфических файлов gziped log в zgrep - PullRequest
2 голосов
/ 10 мая 2011

У меня проблемы с получением списка строк в связке gzipped apache лог-файлов доступа. Я хочу получить список файлов журналов только с номерами 1 и 2, затем выполнить их поиск и извлечь строки с определенным соответствующим текстом.

Первоначально я получил это, чтобы работать только для архивов журнала доступа с номером 1. Текст "/ pathname" был текст, который я искал:

zgrep /pathname/ access_*.log.1.gz

Поскольку ls не поддерживает регулярные выражения, я пришел к следующему, чтобы получить список из текущего каталога нужных мне файлов:

find . -maxdepth 1 -type f -regex '\./access.+\.log\.[1|2]\.gz' -printf '%P\n'

find . -maxdepth 1 -type f -regex '\./access.+\.log\.[1|2]\.gz' | sed "s|^\./||"

Моя проблема теперь заключается в том, чтобы взять вывод из этого списка файлов и згрепэпировать по файлам, чтобы вернуть строки в тех файлах, которые соответствуют моему тексту. Я лаю не на том дереве?

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

Попробуйте:

zgrep /pathname/ access_*.log.{1,2}.gz

В качестве альтернативы используйте find -exec:

find . -maxdepth 1 -type f -regex '\./access.+\.log\.[1|2]\.gz' -exec zgrep /path/ {} \;
0 голосов
/ 10 мая 2011

У меня нет apache-логов, поэтому я использую похожий, но не идентичный шаблон:

ls /var/log/*.[12].gz

Оболочка не поддерживает регулярные выражения, но группируется с [123] или [1-3], а также с {1,2,3} и {1..3} или даже {o..w} и {066..091}.

...