imprime a data de uma linha mail.log

1

Eu tenho uma linha mail.log e usando sed e pipes eu posso extrair o assunto, o remetente e o destinatário do e-mail,

echo "Jul 15 09:04:38 mail postfix/cleanup[36034]: 4A4E5600A5DE0: info: header Subject: The tittle of the message from localhost[127.0.0.1]; from=<sender01@mydomain> to=<recipient01@mydomain> proto=ESMTP helo=<mail.mydomain>" | sed -e 's/^.*Subject: //' -e 's/\]//' -e 's/from localhost//' -e 's/^.\];//' |sed -e 's/\[127.0.0.1; //' -e 's/proto=ESMTP helo=<mail.mydomain>//'

Eu tenho a saída

The tittle of the message from=<sender01@mydomain> to=<recipient01@mydomain>

minha saída desejada é

Jul 15 09:04:38 The tittle of the message from=<sender01@mydomain> to=<recipient01@mydomain>

Como extrair a data e adicioná-la à saída?

    
por Emilio Galarraga 16.07.2017 / 01:09

1 resposta

0

Feio, mas coloque isso no começo da declaração sed :

 -e 's/^\([[:alpha:]]+ [[:digit:]]+ [[:digit:]]+:[[:digit:]]+:[[:digit:]]+\).*Subject:\(.*\)//'

Ou se você sempre souber que o "postfix de e-mail" estará no texto nessa posição, você pode simplesmente usar:

 -e 's/^\(.*\) mail postfix.*Subject:\(.*\)//'

E outras variações são possíveis. A chave é capturar a data, pular as partes com as quais você não se importa e novamente capturar o restante que ainda precisa ser processado. Para capturar surround com \( e \) e para imprimir o que você capturou use \n onde n é a posição de uma captura em particular (primeiro é 1, segundo é 2, etc.)

E agora que você sabe disso, provavelmente poderá descobrir como eliminar todas as diretivas separadas (-e), usar vários grupos de captura e reduzi-la a uma única expressão sed .

    
por 16.07.2017 / 03:28