Назад | Перейти на главную страницу

grep'ing через mailq

Я хочу отфильтровать некоторые почтовые идентификаторы, возвращаемые mailq (Постфикс). Однако этот формат не очень удобен для использования с grep, поскольку информация для не замужем почтовые пакеты множественный линии:

  9F701869D2     1356 Mon Aug 23 12:13:43  some@sender
  (host some.host[1.2.3.4] said: 450 4.1.1 some error message)
                                           some@recipient

  9437586CF4     3153 Sat Aug 21 09:36:40  some@other.sender
  (host some.host[1.2.3.4] said: 450 4.1.1 some error message)
                                           some@other.recipient

Как проще всего получить, например, все почтовые идентификаторы, в которых произошел определенный код ошибки? Возможно, удалив (одиночные) символы новой строки, затем greping, а затем cuting? Или с помощью другого, более подходящего инструмента?

Пожалуйста, объясните свой ответ. Меня больше всего интересует не решение моей текущей проблемы копированием и вставкой (фильтрация по коду ошибки), а понимание того, как легко анализировать такой многострочный вывод.

Что о:

grep -C 1 сказал:

-C является контекстом и возвращает одну строку до и после "said:". Кроме того, на будущее: -A - после, -B - до.

grep -C 1 сказал: | grep ^ [0-9] | вырезать -f1 -d ""

(для списка идентификаторов)

Если вам нужно что-то более сложное, вам придется использовать awk.

Я бы использовал Perl и Постфикс :: Парс :: Mailq модуль.
Если вы не знаете Perl, исправить хороший сценарий будет непросто, но не стесняйтесь обращаться за помощью.
Если вас интересует, как модуль анализирует проверку вывода источник

Пока вы можете придумать что-нибудь, что можно использовать для изоляции адреса отправителя или получателя, mailq можно анализировать с помощью awk:

mailq | grep @ | awk {'print $7'}