Extraindo endereços de e-mail

1

Eu tenho um arquivo que contém linhas como esta:

user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,

Qual é a melhor maneira de extrair endereços de e-mail desse arquivo?

    
por orbeffect 13.11.2013 / 08:52

3 respostas

3

Você pode usar awk como indicado na outra resposta.

Você pode usar sed ou perl ou ruby semelhante: por exemplo,

perl -wlne '/<(.*)>/ and print $1' file

Mas usando bash conforme solicitado, também é possível.

Primeiro passo. Apenas enviando o arquivo linha por linha:

while read line; do echo $line; done <file

Próxima etapa removendo o prefixo e o sufixo indesejados:

while read line; do line=${line##user=<}; line=${line%%>,}; echo $line; done <file

O mesmo um pouco mais genérico e encurtado:

while read line; do line=${line##*<}; echo ${line%%>*}; done <file

Isso funciona para o seu exemplo e também deve funcionar com outros shells.

Se você quer apenas cortar um par de personagens na frente e no final você pode usar:

while read line; do echo ${line:6:-2}; done <file

Você pode ler a página man fine do bash ( man bash ) para mais detalhes.

    
por 13.11.2013 / 09:43
1

Tenho certeza de que poderia haver uma maneira melhor do que isso, mas fora do topo da minha cabeça, awk -F '<|>' '{ print $2 }' filename

    
por 13.11.2013 / 09:06
0

Se insistir em usar o bash, na versão mais recente:

Expansão do parâmetro Shell: link
Comprimento da corda: link
Expansão de subcadeia: link

#!/bin/bash

while read line; do
    len=$((${#line}-8))
    echo ${line:6:$len}
done < file
    
por 13.11.2013 / 10:05