Por que esse comando sed não está produzindo domínios exclusivos?

0

Eu tentei extrair domínios exclusivos de uma lista de emails armazenados em uma pasta. Eu tentei o seguinte comando sed :
A entrada fornecida foi legível para mim como e-mails no arquivo.

sed 's/^.*@//g' "180 Millions Emails Data 1"/* | sort -u > OutPutUniqueDomain2.txt

A saída é algo assim:

®_18casper???!!!!!!!®@yahoo.com
®_18casper®@yahoo.com
§Ú°Û±o€£°÷°Ê€H§A§OœK¬Ü@home.com
³·³·---ŠÜ€ÖÁÙŠ³§[email protected]
§AŠn¶Ü@hotmail.com
³aªoºÐ@hotmail.com
aol.com
Aol.com
Aol.Com
AOl.com
AOL.com

A saída esperada é:

yahoo.com
home.com
hotmail.com
aol.com

Espero ter apenas domínios exclusivos na minha saída. Eu não sei mesmo se o arquivo de entrada é alimentado corretamente ainda este tipo de caracteres desconhecidos estão aparecendo no arquivo e até mesmo o domínio não é extraído. Eles aparecem como um email. Além disso, o domínio não é exclusivo. O que eu fiz de errado com o comando?

    
por Jaffer Wilson 31.01.2017 / 10:50

1 resposta

3

Muito obrigado ao @zwets por identificar o problema e correção da codificação. Os símbolos estranhos devem ser destruídos fazendo

iconv -f ISO-8859-2 -t UTF-8 file | sed -r 's/\r//; s/.*@([^@]+)$/\L/' | sort -u > output

(com base nos seus comentários no bate-papo)

Explicação do comando sed :

  • .*([^@]+)$ salva os caracteres que não são @ no final da linha
  • \L minúscula tudo
  • da parte salva de antes
por Zanna 31.01.2017 / 11:12