grep'ing pelo mailq

2

Eu quero filtrar alguns dos IDs de e-mail retornados por mailq (Postfix). No entanto, o formato não é muito "amigo do grep", já que as informações para um email único abrangem várias linhas:

  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  [email protected]
  (host some.host[1.2.3.4] said: 450 4.1.1 some error message)
                                           [email protected]

Qual é a maneira mais fácil de obter, por exemplo, todas as IDs de e-mail em que ocorreu algum código de erro específico? Talvez removendo as novas linhas (simples), então grep ing e cut ing? Ou usando alguma outra ferramenta mais adequada?

Por favor, explique sua resposta. Meu principal interesse não é uma solução de copiar e colar para o meu problema atual (filtragem por código de erro), mas sim entender como analisar facilmente essa saída de várias linhas.

    
por Heinzi 25.08.2010 / 13:51

2 respostas

2

E sobre:

grep -C 1 disse:

-C é o contexto e retorna uma linha antes de & depois "disse:". Além disso, para referência futura, -A é para depois, -B é para antes.

grep -C 1 disse: | grep ^ [0-9] | corte -f1 -d ""

(para a lista de IDs)

Se você precisa de algo mais complexo, então você teria que usar o awk.

    
por 25.08.2010 / 14:06
1

Eu usaria o Perl e o Postfix :: Parse Módulo :: Mailq .
Se você não conhece o Perl, não será muito fácil corrigir o bom roteiro, mas fique à vontade para pedir ajuda.
Se estiver interessado em saber como o módulo analisa a saída, verifique a fonte

    
por 25.08.2010 / 14:12