Re: sed und regex

From: Franz Urbanski <fou(at)ON-Luebeck.DE>
Date: Tue, 6 Jan 2004 17:52:14 +0100

On Tue, Jan 06, 2004 at 04:27:28PM +0100, Robert Barten wrote:
> On Tue, Jan 06, 2004 at 03:33:35PM +0100, Christian Weykopf wrote:
> > In der Datei steht:
> > setenv MST "/usr/local/mst/fred;/usr/local/mst/karl"
>
> Beispiel unten gilt nur, wenn tatsächlich diese Zeile, jedenfalls mit
> karl am Ende, in der Datei steht. Sonst würde ich wie Franz erst auf
> Vorkommen prüfen.
>
> > Nun soll ein weiterer Pfad hinzugefügt werden, z.B.
> > /usr/local/mst/barb, aber nur wenn er noch nicht exisitert.
> > Ich habs jetzt mit einem C-Programm gemacht.
>
> cat datei | \
> sed -E 's/(setenv MST.*karl)"/\1;\/usr\/local\/mst\/barb\"/' > datei

Vorsicht, das geht schief! Auf diesen "Trick" bin ich auch
schon reingefallen.

Denn die Umleitung mit '> datei' loescht diese, so dass cat nur
noch EoF sieht.

Also besser:
  sed 'expression' datei > datei.neu && mv datei.neu datei

Ausserdem wuerde der Pfad auch dann angefuegt werden, wenn er schon
da ist. D.h. man muesste den Ausdruck noch ein wenig aufbohren.

 sed -e '/setenv MST/s/\/usr\/local\/mst\/barb\;//;
        /setenv MST/s/\"/\"\/usr\/local\/mst\/barb/\;/' \
> datei.neu && mv datei.neu datei

Also erstmal loeschen und dann vorne einfuegen (beim ersten '"') und
das nur in der Zeile, die 'setenv MST' enthaelt.

-Franz

To Unsubscribe: send mail to majordomo.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 06 Jan 2004 - 17:57:11 CET

search this site