* Michelle Konzack schrieb am 28.Aug.2003:

> Versuche gerade Configdateien aus einem Script heraus zu editieren...
> Wenn es nur darum gehen w�rde, eine neue aus einer Template zu erstellen, 
> kein Problem...
> 
>     Debian=#irgendwas#
>     
>     sed "/#irgendwas#/$(NeuerWert)/" $(Configfile) > $(Configfile)

Nein, so auf keinen Fall, die Datei aus dem sed liest und in der
umgelenkt wird mu� eine andere sein. Anschlie�end kann man die neue
Datei ja umbenennen.

Und bitte nicht auf Tricks wie

cat datei | sed .... | cat > datei 

hereinfallen. Die Pipes wirken wie Puffer. Bei kleinen Dateien
funktioniert das, nicht aber bei gro�en.

> Nur ist es so, das ich eine bereits vorhandene Configuration �ndern will, 
> also zum Beispiel
> 
>     Debian=gut
> in
>     Debian=super
> 
> Wie kann ich das am besten machen ?

/^Debian=/s/gut/super/

Es werden nur Zeilen ber�cksichtigt, in denen Debian= am Anfang
steht.

Das Suchmuster vor dem s mu� zwingend mit / begrenzt werden. Nach
dem s kann jedes beliebige Zeichen stehen etwa:

/^Debian=/s|gut|super|

oder wenn es unbedingt sein mu� auch:

/^Debian=/sagutasupera

Du kannst auch einen Bereich eingeben, etwa:

/^Debian/,/^Ende/s/gut/super/g

hier wird jedes Aufkommen des Wortes gut zwischen der ersten Zeile,
die mit Debian anf�ngt und die darauf erste Zeile die mit dem Wort
Ende anf�ngt, durch das Wort super ersetzt. Einschlie�lich der
beiden begrenzenden Zeilen. Nat�rlich mu� da nicht zwingend ein ^ am
Anfang stehen. Es kann da jedes beliebige RegExp stehen.

Eine andere M�glichkeit w�re:

3,14s/gut/super/g

hier wird jedes gut in den Zeilen 3 bis 14 einschlie�lich durch
super ersetzt. Auch Kombinationen gehen:

3,/^Ende/s/gut/super/g
/^Debian/,14s/gut/super/g

> Eigentlich sollte 'sed' mit dem Editieren ab dem '=' anfangen und 
> dann bis zum Zeilenende, nur dann gibt es auch wiederum probleme, 
> denn einige Zeilen haben Komentare dran kleben wie
> 
>     Debian=gut                # stimmts ?
> 
> die ich allerdings erhalten will. 

s/=gut\([       ]*#.*\)\?$/=super\1/

Alles was zwischen \( und \) steht wird zu einer Gruppe
zusammengefa�t. Wegen des nachfolgenden \? kann es vorkommen, mu�
aber nicht. Im Ersetzungsteil wird die durch \1 die erste Gruppe, so
wie sie ist hingeschrieben. \2 w�re die zweite Gruppe usw. Hierbei
z�hlt die �ffnende Klammer. Es k�nnte ja auch verschachtelt sein.

Zwischen [ und ] steht hier ein Leerzeichen und ein Tab. Man k�nnte
auch [:blank:] nehmen, ist hier vielleicht sogar besser, da man dann
erkennt, was gemeint ist.

Bernd


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

Antwort per Email an