[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: E-Mail-Liste mit bash pflegen


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/