Como extrair e-mail ou domínio do arquivo de dados mistos no linux

1

Conteúdo do arquivo:

17541   From Email      [email protected]      Inbound
Policy Manager  Envelope Analysis
Profiler
17541   From Email      [email protected]      Inbound
Policy Manager  Envelope Analysis
Profiler
17541   From Domain      test.co.uk      Inbound
Policy Manager  Envelope Analysis
Profiler
17541   From Domain      yahoo.co.uk      Inbound
Policy Manager  Envelope Analysis
Profiler
17541   From Email      [email protected]      Inbound
Policy Manager  Envelope Analysis
Profiler

Eu uso esse comando para extrair e-mails e convertê-los para o novo formato, mas não consigo extrair domínios. Eu uso "sort -u" porque alguns e-mails são duplicados no arquivo.

cat 1| grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b"|sed -e 's/^/E,/'|sort -u

Visualização esperada após domínios do grep:

test.co.uk
yahoo.co.uk
    
por Kalin Borisov 16.10.2012 / 09:20

2 respostas

0

A sua expressão grep está bem, é o sed que não funciona, mude para:

< 1 grep -Eo '\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b' | sed -e 's/[^@]*@//' | sort -u

Assumindo que o arquivo de entrada é chamado de 1 . Você também pode fazer tudo com o grep:

< 1 grep -Eo '\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b' | grep -Eo '[^@]+$' | sort -u
    
por 16.10.2012 / 16:09
1

Este awk one-liner fornece a saída que você deseja

awk '/From Email/ { if( !match($4,"@") ){ print $4 } }' inputfile

Seleciona as linhas que contêm 'From Email' e verifica se a quarta coluna contém um @. Você pode usar match com expressões regulares para corresponder a um domínio e não a um endereço de e-mail, se desejar.

    
por 16.10.2012 / 10:18