Extrair segmentos de texto de ficheiro txt

Cunha00

Power Member
Olá juventude,

estou a postar isto aqui porque penso ser o sitio mais apropriado,

o meu problema é o seguinte: tenho um ficheiro *.txt com vários contactos disposto desta forma:

Nome bla bla 1
Rua xpto1
2540 -047 Cidade
Tel.: 111111111 / Fax: 111111111
Email: [email protected]
Web: www.dddddd.pt


Nome bla bla 2
Rua do sitio
7150 -249 Cidade
Tel.: 22222222 / Fax: 222222222
Email: [email protected]
Web: www.site.com

etc. isto com centenas deles.

Eu queria saber se é possível fazer algum script ou macro ou magia negra de modo a obter uma lista só com o emails tipo:

[email protected]
[email protected]
[email protected]
...

basicamente é pegar em tudo que seja [espaço]qualquercoisa@qualquercoisa[espaço]

Isto é possível? Com que linguagens ou ferramentas?
Os meus conhecimentos em "programação" é só HTML e CSS e umas bases de javascript
 
Se tiveres acesso a Linux ou outro sistema tipo Unix (por exemplo, Mac OS X), basta correr isto num terminal:

Código:
grep "Email: " ficheiro.txt |sed 's/Email: //'

Também não deve ser difícil em Excel, usando a função IF para ficar só com as linhas que têm a string "Email: " e depois substituindo essa string por nada. (Claro que usando estes métodos também apanhas qualquer outra linha que tenha a string "Email: ", mas suponho que isso seja improvável. Podia-se procurar um padrão mais complexo que também validasse o próprio endereço de e-mail.)
 
Com awk basta:

Código:
awk '/Email:/{print $2}' doc.txt

Em python:
Código:
import re
matches = re.finditer(r'Email:\s*([^\s]+)\s*', open('doc.txt').read())
for g in matches:
  print(g.group(1))

Em ruby:
Código:
File.open("doc.txt", 'r') do |f|
  f.read.scan(/Email:\s*([^\s]+)\s*/).each{|m| puts m}
end

Estas soluções assumem que os dados do ficheiro estão bem formados, isto é, o que vem a seguir ao Email é MESMO um email. Não faz qualquer validação do bom formato do mesmo.
 
Última edição:
Muito obrigado pelas respostas de ambos.

Tentei a sugestão do nfk:
Código:
grep "Email: " ficheiro.txt |sed 's/Email: //'

E funcionou às mil maravilhas.

Quando tiver tempo vou brincar um pouco com todas essas opções de linguagens já que cada vez me começo a interessar mais pelo mundo da programação.
 
Gostei da alternativa do sl0w, com o awk, porque usa só um programa. Em relação à minha, o grep encontra as linhas onde ocorre um determinado padrão e o sed substitui a parte que não queres ("Email:") por nada. Se queres começar a programar, python é uma boa linguagem. É simples e muito legível, mas também dá para fazer programas complexos. Há muitas outras linguagens boas para começar, apenas sugiro Python porque é a que uso mais.
 
Back
Topo