linux-l: Regular Expressions
Jens Dreger
jens.dreger at physik.fu-berlin.de
Do Okt 26 13:06:34 CEST 2000
On Thu, Oct 26, 2000 at 12:50:39PM +0200, Joerg Haertwig wrote:
> Michael Weber wrote:
> >
> > Moin,
> >
> > heute nacht haben sich 2 Autoresponder froehlich
> > unterhalten. Ergebnis : 33.897 Mails, das ganze
> > auf 4 Accounts.
> >
> > Dazwischen ungefaehr 200 Usermails, die unbedingt
> > gerettet werden sollen. Sehe ich ja auch ein. Nu
> > schwoere ich ja auf vi aber das scheint ihn zu
> > ueberfordern ( oder ich bin zu doof, was vermutlich
> > eher der Fall ist ), wie bekomme ich die Autorespondermails
> > aus den Dateien ? Einzige Gemeinsamkeit ist das
> > sie mit "From" anfangen und mit "-Team" aufhoeren.
> >
> > Meine Versuche das mit Suchen und Ersetzen ueber
> > Regular Expressions hinzubekommen, scheitern
> > allerdings klaeglich. Vermutlich liegts daran, das
> > dazwischen mehrere Zeilen stehen oder an den Zeilen-
> > umbruechen dazwischen.
> >
> > Meine bewaehrte Kombination mit find,chop und print
> > funkt auch nicht. Kann mir bitte einer auf die Spruenge
> > helfen ?
> >
> > Michael
>
>
> mit perl ist es einfach
>
>
> zb.
>
> ...
>
> open(FILE, "<dein/file") || die "nich da";
> open(OFILE, ">/dein/neues/file") || dir "kann nich schreiben";
>
> my $schalter = 0;
> while(<FILE>) {
>
> $schalter = grep("^From", $_);
> $schalter = grep("^-Team", $_);
>
> print OFILE, $_ if ! $schalter;
>
> }
> close(FILE);
> close(OFILE);
>
> ...
>
>
> ohne gewaehr.
Vorsicht: "^From" matched auch "From:".
Ausserdem hatte ich das so verstanden, dass "-Team" ganz am Ende
steht. Ich habe meine Version gerade mal mit einem alten linux-l
20MB folder gestestet, und siehe da: es hat zwei mails das Leben
gekostet, und zwar endeten die auf:
Ihr SuSE Support-Team
------8<-------------
#!/usr/bin/perl -w
@mail=();
open( OUT, ">newfolder" ) || die "wtf?";
while(<>) {
print '.';
if(/^From /) { print $m++,"\n"; print OUT @mail; @mail=(); }
push @mail;
if(/-Team$/) { print "killed\n"; @mail=(); }
}
print $m++,"\n";
print OUT @mail;
close( OUT );
--------8<---------------
Aufruf "scriptname.pl folder".
Gruss,
Jens.
Mehr Informationen über die Mailingliste linux-l