Como grep apenas palavras selecionadas de um arquivo?

1

Eu preciso obter uma lista de todos os endereços de e-mail de um arquivo.

Eu estava tentando usar

grep @ filename

mas isso retorna a linha inteira.

Existe alguma maneira que eu possa obtê-lo para retornar apenas o endereço de e-mail e não a linha inteira?

    
por null_radix 21.01.2010 / 22:18

3 respostas

0

@rbright esta solução parece funcionar. a opção "-o" é o que eu estava perdendo! Mas acabei escrevendo um script php antes de receber sua resposta.

$ handle = fopen ("MYFILE.txt", "r");

if ($handle) {  
    while (!feof($handle)) {
        $buffer = fgets($handle);

        $pieces = explode(" ",  $buffer);
        foreach($pieces as $piece){
            if( strstr($piece, '@' && $piece != " ")){              
           echo $piece;             
            }
        }   
    }
 fclose($handle);
} 

Isso é rápido e sujo, mas vai durar até que haja um @ que não esteja em um endereço de e-mail, o que é muito improvável na minha situação

    
por 25.01.2010 / 16:50
1

Isso vai depender do formato do arquivo. Por exemplo, digamos que o arquivo tenha

[email protected] stuff you don't want
[email protected] more stuff you don't want
[email protected] and more

então awk '/@/{print $1}' parece ser a resposta óbvia.

Poste um exemplo do formato de arquivo, se não for o que você tem.

    
por 21.01.2010 / 23:44
1

Observe que a correspondência correta de qualquer endereço de e-mail válido é uma magia profunda , por isso, se você realmente quer pegar tudo sem falsos positivos ou negativos, você deve usar um regex que alguém escreveu. Mas se você está apenas procurando por um grep que seja bom o suficiente, confira a opção -o que mostrará somente o texto correspondente.

$ grep -Po '\S+@\S+\.\w+' yourfile.txt

Isso detectará alguns endereços de e-mail simples, além de alguns itens que não são endereços de e-mail válidos (como "@@@@ a"). Ajuste seu regex conforme apropriado. Por exemplo, este é mais restritivo:

$ grep -Po '[\w+.]+@[\w.]+\.\w+' yourfile.txt
    
por 22.01.2010 / 00:47