Como grep e-mails de um arquivo?

2

Eu tenho uma longa lista de endereços de e-mail que preciso extrair, mas não consigo encontrar o caminho certo para fazê-lo.

Os dados são estruturados de maneira semelhante a isso.

Patabee meeta needo [email protected] pizz bees
Needo [email protected] hama lines question
unix search exchange [email protected] extracts

Uma coisa consistente em meus dados são os domínios de e-mail.

Atualmente eu tenho ...

grep -oniT @outlook.com /path/to/file/of/emails/and/such.txt

que retorna uma boa saída de ..

3624   :@outlook.com
3625   :@outlook.com
3626   :@outlook.com
3630   :@outlook.com
3631   :@outlook.com
3632   :@outlook.com
3633   :@outlook.com
3634   :@outlook.com
3635   :@outlook.com

No entanto, eu preciso selecionar o endereço de e-mail inteiro, não apenas o domínio (que é o que estou atualmente pesquisando.

Como posso fazer o grep selecionar o campo inteiro que encontrou a string correspondente, mas não a linha inteira?

    
por TrevorKS 05.06.2018 / 14:26

2 respostas

1

-o imprime somente a parte que corresponde ao padrão, portanto, será necessário estender o padrão para incluir a peça antes do @ . Com os endereços em sua amostra, a captura de quaisquer não-brancos deve ser feita:

$ grep -oniTE '[^[:blank:]][email protected]'  foo 
  1:    [email protected]
  2:    [email protected]
  3:    [email protected]

Em geral, no entanto, os endereços de e-mail são difíceis de serem analisados (eles podem conter espaços em branco citados), e os itens acima perderão alguns endereços de e-mail válidos (assim como alguns inválidos). Veja por exemplo Wikipedia e os padrões relevantes para os detalhes sangrentos.

    
por 05.06.2018 / 14:42
2

Aqui está uma solução usando o grep :

grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" /path/to/file/of/emails/and/such.txt

Isso obterá todos os endereços de e-mail no arquivo. Você pode querer adaptar o regex para corresponder apenas a um domínio específico.

-E, --extended-regexp Interpret PATTERN as an extended regular expression

-o, --only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

    
por 05.06.2018 / 14:40

Tags