• 22.10.2025, 12:18
  • Register
  • Login
  • You are not logged in.

 

major23hh

God

Programm/Skript zum Emailadressen auslesen

Wednesday, July 7th 2004, 5:25pm

Hallo,

ich brauche eine Programm/Skript, welches aus einer Textdatei alles Testpassagen mit den Format XXXXX@XXX.XXX ausliest und dann in eine neue Textdatei schreibt, am besten mit "; " drangehängt. Kennt jemand ein Programm dafür oder hat ein Skript zur Hand?

Y0Gi

God

Re: Programm/Skript zum Emailadressen auslesen

Wednesday, July 7th 2004, 6:15pm

5min sache.

aber wenn du a) eine gewisse sammlung von email-adressen meinst: die hab ich hier. und wenn du b) das semikolon willst, um es in thunderbird zu pasten: zum einen benutzt tb von selbst ein komma, zum anderen kann man die auch reinkopieren, wenn die jeweils in einer zeile stehen.

derJoe

Senior Member

Re: Programm/Skript zum Emailadressen auslesen

Wednesday, July 7th 2004, 8:04pm

Source code

1
2
3
4
for f in $( sed 's/[^@0-9a-zA-Z_\.-]/\n/g' < IN ); do
  echo "`echo $f &#124; grep -G  '^[0-9a-zA-Z_\.-]\+@[0-9a-zA-Z_\.-]\+\(\.[0-9a-zA-Z_\.-]\+\)\+$'`;" &#124; grep -vG '^;$' >> TMP
done
sort TMP &#124; uniq > OUT


IN und OUT durch die Ein- bzw. Ausgabedatei ersetzen.
TMP durch eine temporäre Datei ersetzen.

Gruß

derJoe

major23hh

God

Re: Programm/Skript zum Emailadressen auslesen

Thursday, July 8th 2004, 3:34am

ok, schonmal vielen dank. ist es egal, in welcher sprache ich das realisieren, weil z.b. java doch etwas anders angesprochen werden muss, was externe dateien angeht, oder sehe ich das falsch?

LaNcom

Senior Member

Re: Programm/Skript zum Emailadressen auslesen

Thursday, July 8th 2004, 4:02am

Für mich sieht das Skript stark nach SH/ BASH aus?

Dann wäre es so 'etwas' benutzerfreundlicher:

Source code

1
2
3
4
5
#!/bin/sh
for f in $( sed 's/[^@0-9a-zA-Z_\.-]/\n/g' < $@ ); do 
   echo "`echo $f &#124; grep -G  '^[0-9a-zA-Z_\.-]\+@[0-9a-zA-Z_\.-]\+\(\.[0-9a-zA-Z_\.-]\+\)\+$'`;" &#124; grep -vG '^;$' >> /tmp/SORT
 done 
sort /tmp/SORT &#124; uniq > $@.sorted


In Java fliegt Dir das auf jeden Fall um die Ohren... ;-)
"Computer games don't affect kids; I mean if Pac-Man affected us as kids, we'd all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music." -- Kristian Wilson, Nintendo, Inc, 1989.

derJoe

Senior Member

Re: Programm/Skript zum Emailadressen auslesen

Thursday, July 8th 2004, 5:35am

@LaNcom: Ups stimmt, hab ich ja vergessen zu schreiben, dass es für die Shell ist :-[. Und die Datei beim Aufruf anzugeben ist natürlich sinnvoller.

Ich hab es mal zum Test auf eine Datei (mbox, also viel Text und wenig Email-Adressen) losgelassen und es braucht ewig. Leider hab ich noch keine all zu großen Erfahrungen mit Shell-Skripten sammeln können, bin mir aber sicher, dass man da noch einiges optimieren kann.

Es währ dafür auf jeden Fall sinnvoll zu wissen, wie die Datei aufgebaut ist, z.B. ob jede Zeile entweder eine Email-Adresse oder keine ist, ob sie eine Adresse und weiteren Text enthalten kann oder ob sie mehrere Adressen enthalten darf, wie die Einträge getrennt sind, ob es andere Einträge gibt die ähnlich wie Email-Adressen aufgebaut sind usw.

Gruß

derJoe

Y0Gi

God

Re: Programm/Skript zum Emailadressen auslesen

Thursday, July 8th 2004, 2:30pm

http://aspn.activestate.com/ASPN/Cookboo…n/Recipe/138889

und etwas angepasst:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import sys
import re

def grab_email(file):
    found = []
    if file != None:
        mailsrch = re.compile(r'[\w\-][\w\-\.]+@[\w\-][\w\-\.]+[a-zA-Z]{1,4}')
        for line in open(file, 'r'):
            found.extend(mailsrch.findall(line))

    # remove duplicate elements
    # borrowed from Tim Peters' algorithm on ASPN Cookbook
    u = {}
    for item in found:
        u[item] = 1

    # return list of unique email addresses
    return u.keys()

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print 'usage: %s <file with email addresses>' % sys.argv[0]
        sys.exit()
    for addr in grab_email(sys.argv[1]):
        print addr


dazu noch eine dist-setup.py:

Source code

1
2
3
4
from distutils.core import setup
import py2exe

setup(console=["mailgrabber.py"])
und ein

Source code

1
python dist-setup.py py2exe

und schon hat man ne windows-binary (natürlich ist dann nur noch der ursprüngliche source plattform-unabhängig).

den output (je eine adresse pro zeile) kann man dann mit > in eine datei umlenken oder noch an diverse sortierer oder z.b. tee weiterleiten.

edit: na das mit der einrückung muss man sich halt denken oder kopieren...