• 12.08.2025, 03:35
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

major23hh

God

Programm/Skript zum Emailadressen auslesen

Mittwoch, 7. Juli 2004, 17:25

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

Mittwoch, 7. Juli 2004, 18:15

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

Mittwoch, 7. Juli 2004, 20:04

Quellcode

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

Donnerstag, 8. Juli 2004, 03:34

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

Donnerstag, 8. Juli 2004, 04:02

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

Dann wäre es so 'etwas' benutzerfreundlicher:

Quellcode

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

Donnerstag, 8. Juli 2004, 05:35

@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

Donnerstag, 8. Juli 2004, 14:30

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

und etwas angepasst:

Quellcode

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:

Quellcode

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

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

Quellcode

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...