Kategorien
Allgemein

Log-Dateien lesbar machen

Da hatte ich eine tolle Log-Datei mit ganz vielen Einträgen. Aber vi wollte die Datei nicht richtig anzeigen. Das Problem war, dass alle Einträge in einer Zeile standen, da ich die newlines am Ende der Einträge vergessen hatte. Was nun

Schnell ein Perl-Skript geschrieben, dass die Anfänge der Log-Einträge findet und vor diese ein Neues Zeilen Zeichen einfügt.

#!/usr/bin/perl
use strict;
use warnings;

my $days = qr{Mon|Tue|Wed|Thu|Fri|Sat|Sun};
my $months = qr{Jan|Feb|Mar|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec};
my $date_regex = qr{(?:$days)(?:$months) d{2} d{2}:d{2}:d{2} d{4}};

while (my $line = <>) {
   while ($line =~ m/($date_regex.*?(?=$date_regex))/g) {
      print "n$1";
   }
}
Kategorien
Allgemein

Adressen aus Mails extrahieren

Es scheint ein Volkssport zu sein, sich die Adressbücher in Thunderbird zu löschen. Das Vergnügen ist aber meist nur kurz, denn die Adressen sind nach dem Löschen und weg und werden dennoch gebraucht. Da ist guter Rat teuer.

Oder man hat ein Perl-Skript wie etwa das folgende:

#!/usr/bin/env perl
use strict;
use warnings;
use Mail::Header;

my $head = Mail::Header->new([<>], Modify => 0);
my $bcc = join("", split(/n/, $head->get('BCC')));
my %addresses = ();
while ($bcc =~ m/("[^"]*" <[^>]+>|<[^>]+>|[^,]+),s*/g) {
    my $address = $1;
    if ($address =~ m/(.*) <([^>]*)>/) {
        $addresses{$2}=$1;
    } else {
        $addresses{$1}="";
    }
}

my @sorted_addresses = map { [$_->[1], $addresses{$_->[1]}] }
    sort { $a->[0] cmp $b->[0] }
    map { [lc($_), $_] } keys %addresses;
for my $address (@sorted_addresses) {
  print "$address->[0], $address->[1]n";
};

Noch einfacher ist aber eventuell ein Python-Skript. Auch wenn es ein deprecated Modul benutzt:

#!/usr/bin/env python
import rfc822
f=open('mail_mit_adressen.txt')
m=rfc822.Message(f)
for address in rfc822.AddressList(m['bcc']):
   print ""%s",%s" % address

Beide Ansätze gehen davon aus, dass man noch eine Mail mit allen Addressaten des gelöschten Adressbuches auffindet.