Unterteilung bei grep unterbinden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
thilo
Beiträge: 241
Registriert: 12.12.2002 22:48:44

Unterteilung bei grep unterbinden

Beitrag von thilo » 18.02.2004 15:34:40

Hallo!

Da ich mehrere Mailinglisten aus verschiedenen Bereichen abonniert habe, erhalte ich täglich sehr viele E-Mails. Mit procmail sortiere ich die eingehenden Nachrichten in verschiedene IMAP-Ordner.
Das Problem: Meine procmail-Logdatei wird nach einigen Tagen/Wochen sehr groß und unübersichtlich.

Aus diesem Grund möchte ich meine "procmail.log" aufsplitten. Unter anderem möchte ich alle SPAM-Nachrichten in einer eigenen Datei speichern.
Dazu habe ich folgendes probiert:

Code: Alles auswählen

grep -B 2 "^  Folder: /usr/sbin/sendmail -oi spam" /home/thilo/procmail.log >> procmail_spam.log
Die erstellte Datei "procmail_spam.log" sieht so aus:

Code: Alles auswählen

From alice.arnold_pf@openface.ca Wed Feb 18 10:37:23 2004
 Subject: =?ISO-8859-1?b?RWFzeSBUbyBPcmRlciAtIEZhc3QgdG8gRGVsaXZlcg==?=
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		   4912
From yiweth@funky.co.uk Wed Feb 18 10:37:24 2004
 Subject: 66.VY. Buy Valium Online from a US Pharmacy
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		   5932
--
From gleasonly@iut-etu-src.ujf-grenoble.fr Wed Feb 18 10:37:29 2004
 Subject: cheap víagra
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		   4962
From castanet@filemeds.com Wed Feb 18 10:37:30 2004
 Subject: g e n e r i c meds
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		   5244
From rohvxe@phreaker.net Wed Feb 18 10:37:31 2004
 Subject: exhilarate i'd dactyl resist fritter
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		  11375
--
From oqzgzjgrizmuph@hotmail.com Wed Feb 18 10:37:32 2004
 Subject: re[6]:
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		  11192
--
From ynrdvprceat@mail.com Wed Feb 18 10:37:38 2004
 Subject: bloodhound piezoelectric footage
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		  10930
From josephinemarcum_gz@tenbit.pl Wed Feb 18 10:37:38 2004
 Subject: =?ISO-8859-1?b?UmU6c3BvcnRzIG1lZGljaW5lIGJyZWFrdGhyb3VnaA==?=
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		   4397
--
From gwdmhruclcdsw@phreaker.net Wed Feb 18 10:37:44 2004
 Subject: elmer indigestible acceptor pastime butte
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		  12090
From llnesprehvexdu@programmer.net Wed Feb 18 10:37:44 2004
 Subject: premiere
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		  11812
From pseepfadqic@usa.com Wed Feb 18 10:37:45 2004
 Subject: morphemic pasty assurance ombudsman deprave
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		  11576
--
From graqivfeh@att.net Wed Feb 18 10:40:37 2004
 Subject: fungible digitate revision paucity
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		  12584
--
From pqszvy@xpost.net Wed Feb 18 11:19:57 2004
 Subject: northland
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		  12223
--
From Info@wemeds3.com Wed Feb 18 14:43:36 2004
 Subject: Info No pre scription F E E S
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de		   5267
Wie man sehen kann, sind manche Abschnitte durch eine "--"-Zeile getrennt.

Mein Ziel ist, dass
entweder
a) alle Einträge durch eine solche Zeile getrennt sind
oder
b) eine solche Trennzeile nie mit ausgegeben wird

Wie kann ich das erreichen?

Vielen Dank für Eure Mühe!

Gruß,

Thilo

Benutzeravatar
zyta2k
Beiträge: 2446
Registriert: 14.03.2003 09:18:00
Kontaktdaten:

Beitrag von zyta2k » 18.02.2004 15:42:40

Evt. so ??

Code: Alles auswählen

grep -B 2 "^  Folder: /usr/sbin/sendmail -oi spam" /home/thilo/procmail.log | sed -e 's/^--.*$//g' >> procmail_spam.log

thilo
Beiträge: 241
Registriert: 12.12.2002 22:48:44

Beitrag von thilo » 18.02.2004 18:27:19

Hallo "zyta2k"!

Vielen Dank für Deine Antwort.

Leider funktioniert Dein Vorschlag nicht 100%ig: Die beiden Zeichen werden zwar entfernt, aber leider nicht das Zeichen für "Return". Als Ergebnis erhalte ich also folgendes:

vorher:

Code: Alles auswählen

From yiweth@funky.co.uk Wed Feb 18 10:37:24 2004
 Subject: 66.VY. Buy Valium Online from a US Pharmacy
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de         5932
-- 
From gleasonly@iut-etu-src.ujf-grenoble.fr Wed Feb 18 10:37:29 2004
 Subject: cheap víagra
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de         4962
From castanet@filemeds.com Wed Feb 18 10:37:30 2004
 Subject: g e n e r i c meds
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de         5244
nachher:

Code: Alles auswählen

From yiweth@funky.co.uk Wed Feb 18 10:37:24 2004
 Subject: 66.VY. Buy Valium Online from a US Pharmacy
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de         5932

From gleasonly@iut-etu-src.ujf-grenoble.fr Wed Feb 18 10:37:29 2004
 Subject: cheap víagra
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de         4962
From castanet@filemeds.com Wed Feb 18 10:37:30 2004
 Subject: g e n e r i c meds
  Folder: /usr/sbin/sendmail -oi spam@hostname.domainname.de         5244
Hast Du noch eine weitere Idee?

Vielen Dank für Deine Mühe!

Gruß,

Thilo

Benutzeravatar
zyta2k
Beiträge: 2446
Registriert: 14.03.2003 09:18:00
Kontaktdaten:

Beitrag von zyta2k » 18.02.2004 19:09:57

Ja. Hab mal in SED gewuselt:

Code: Alles auswählen

grep -B 2 "^  Folder: /usr/sbin/sendmail -oi spam" /home/thilo/procmail.log | sed '/^--.*$/d' >> procmail_spam.log 
Sauberer (falls es funktionieren würde), wär aber dieser String:

Code: Alles auswählen

grep -B 2 "^  Folder: /usr/sbin/sendmail -oi spam" /home/thilo/procmail.log | sed '/^--$/d' >> procmail_spam.log 
Erklärung:

sed '/^--$/d'

Lösche ( das /d am schluss ) alle zeichenketten, welche zu Beginn ( das ^ ) zwei '-' haben und danach zu ende ( das $ ) sind.

Ersteres würde folgendes machen:

Lösche ( das /d am schluss ) alle zeichenketten, welche zu Beginn ( das ^ ) zwei '-' haben, anschliessend beliebig viele (das * nach dem .) (beliebige Zeichen (der .)) haben und danach zu ende ( das $ ) sind.

Hehe. kompliziert ?? *gg*

Antworten