Hallo,

auch wenn ich mich zuvor nicht zu Wort gemeldet habe, aber die kleine Skriptübung hat mich dann doch wachgerüttelt.

Am 26.10.2016 um 21:28 schrieb Bernhard Hering:
Hallo,

man könnte da fix was aus Python regex und String.splits basteln, das
dauert keine Minute,

So was wie z.B. das Skript im Anhang.
Aufruf: python ldap_parse.py <datei_name>
Ist für python3 gedacht aber sollte bei Austausch des print-Aufrufs auch mit python2 spielen. Ist vllt ein bisschen "overkill" mit den regex sollte seinen Zweck aber erfüllen.

Viele Grüße
Kevin


  On 26.10.2016 21:04, Thomas Müller wrote:
Hallo zusammen,

stehe wieder mal vor einem Rätsel was das Parsen von Files betrifft.
Es geht um die Ermittlung von primären Mailadressen und Aliases aus
einem AD und Schreiben in eine Datei.

Die LDAP Abfrage funktioniert und durch diverse grep Sachen erhalte ich
beispielhaft folgenden Inhalt in einer Datei:

--%--
smtp:jemand.ande...@domain.de
smtp:andere.per...@domain.de
mail:i...@domain.de
smtp:nochjemand.ande...@domain.de
smtp:nocheinandere.per...@domain.de
smtp:wernoch...@domain.de
mail:d...@domain.de

--%--

Hier ist gegeben, dass die Aliases (smtp) zur primären Adresse (mail)
gehören. Nur dass eben erst die Aliases kommen, dann die primäre
Mailadresse (quasi ein Trenner) und so weiter.

Rauskommen soll so etwas:

jemand.anderes:i...@domain.de
andere.person:i...@domain.de
nochjemand.anderes:d...@domain.de
nocheineandere.person:d...@domain.de
wernoch.da:d...@domain.de

Wie löse ich das am Besten?
Am Liebsten wäre mir eine Lösung per bash oder python, perl ist nicht
so meins...

Danke fürs Nachdenken und Gruß

--
Mit freundlichen Grüßen
Thomas Müller



import re
import sys

aliases = []
output = []

mail_address_regex = r"(?P<address>(?P<name>[a-zA-Z0-9_.+-]+)@(?P<domain>[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+))"
smtp_line_regex = re.compile(r"^smtp:{}$".format(mail_address_regex))
mail_line_regex = re.compile(r"^mail:{}$".format(mail_address_regex))

with open(sys.argv[1], "r") as file_obj:
    for line in file_obj.readlines():
        smtp = re.match(smtp_line_regex, line)
        mail = re.match(mail_line_regex, line)
        if smtp:
            aliases.append(smtp.group("name"))
        elif mail:
            output.extend(["{}:{}".format(alias, mail.group("address")) for alias in aliases])
            aliases = []
        else:
            raise ValueError("Invalid line: \"{}\"".format(line))

print("\n".join(output))

Attachment: signature.asc
Description: OpenPGP digital signature

Antwort per Email an