[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: E-Mail-Liste mit bash pflegen
[Thread Prev] | [Thread Next]
- Subject: Re: E-Mail-Liste mit bash pflegen
- From: Raphael Eiselstein <rabe@xxxxxxxxx>
- Date: Thu, 3 Mar 2011 01:04:39 +0100
- To: uugrn@xxxxxxxxxxxxxxx
Hallo Werner, On Mon, Feb 28, 2011 at 01:56:00AM +0100, Werner Holtfreter wrote: > Kann man mit zwei, drei Zeilen bash erreichen, dass die in "out" > stehenden Adressen in "cur" gesucht und geloescht werden? Wenn ja, > waere ich fuer eine (ungetestete) Anregung dankbar. Meine Loesung ist zwar kein bash, aber grep(1). Zunaechst die Vorbedingungen anhand Deiner Beschreibung: -------------------------------- $ head -n 10 cur out ==> cur <== foo@xxxxxxxxxxx, bar@xxxxxxxxxxx, bla@xxxxxxxxx, nospam@xxxxxxxxxxx, ==> out <== bla@xxxxxxxxx nospam@xxxxxxxxxxx -------------------------------- Hier der Aufruf: $ grep -F -v -f out cur foo@xxxxxxxxxxx, bar@xxxxxxxxxxx, Erklaerung: -F steht fuer "Fixed Strings", d.h. grep verwendet keine regulaeren Ausdruecke, was in Kombination von "-f" je nach Datenmenge durchaus Geschwindigkeitsvorteile bringen kann. -v ist ein "inverser Treffer", d.h. alle Zeilen in der Eingabedatei, die auf das (ein) Suchmuster passen, werden unterdrueckt. -f sorgt dafuer, dass die Suchmuster aus einer Datei geladen werden und nicht wie normalerweise als Parameter ueber die Kommandozeile angegeben werden. Wenn Du den Inhalt von "cur" ersetzen willst, geht das am besten ueber eine temporaere Datei: #! /bin/sh X=$(mktemp XXXXXXX) grep -F -v -f out cur > $X && mv $X cur Dieser Dreizeiler erzeugt eine temporaere Datei mit zufaelligem Namen und speichert den Namen der Datei in der Variable X. Mit dem obigen grep-Aufruf schreiben wir zunaechst die Ausgabe in diese temporaere Datei und bei Erfolg von grep (&&) wird die temporaere Datei umbenannt zu cur. Warnung bei dieser Methode: wenn die Datei "out" eine leere Zeile enthaelt, dann filtert sie alle Zeilen aus "cur" weg, wenn man "-F" weglaesst. Eine leere Zeile als Suchmuster trifft auf alle Zeilen in der Eingabedatei zu. Durch das "-v" werden damit alle Zeilen ausgefiltert. Durch "-F" werden die Suchmuster aus "out" nicht als regulaere Ausdruecke interpretiert und folglich trifft es nicht auf Eingabezeilen zu. Am besten selbst ausprobieren! Gruss Raphael -- Raphael Eiselstein <rabe@xxxxxxxxx> http://rabe.uugrn.org/ xmpp:freibyterægmx.de | https://www.xing.com/profile/Raphael_Eiselstein GnuPG: E7B2 1D66 3AF2 EDC7 9828 6D7A 9CDA 3E7B 10CA 9F2D .........|.........|.........|.........|.........|.........|.........|.. -- UUGRN e.V. http://www.uugrn.org/ http://mailman.uugrn.org/mailman/listinfo/uugrn Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste Archiv: http://lists.uugrn.org/