awk oder sed Zeile ersetzen?

Ich habe gehört, dass früher sogar die Zukunft besser gewesen sein soll ;).

Aber Spass beiseite.
Nachdem die Frage ja beantwortet ist, möchte ich mal noch zwei andere - wie ich meine interessanten - Dinge zeigen.

1. context address
Anstelle der Zeilennummer, eines Zeilenbereichs oder gar keine Adresse kann man auch Suchmuster als Adresse verwenden.
Es wird dann in allen Zeilen nach dem Pattern gesucht und ggf. ersetzt.
z. B:
Code:
sed -Ee '/optiongrfxres/s/[[:digit:]]{3,4} x [[:digit:]]{3,4}/1920 x 1050/'
oder auch:
Code:
sed -Ee '/optiongrf[xyz]res/s/[[:digit:]]{3,4} x [[:digit:]]{3,4}\/1920\11050/'

2. back references
Teile im Pattern, die zwar zum Suchmuster gehören müssen, aber in der Ersetzung unverändert bleiben, können im Pattern mit Klammern umgeben und in der Ersetzung mit \1 (erste Klammer), \2 (zweite Klammer) usw. wieder eingefügt werden.

Bei bre (also ohne -E) werden die Klammern als normale Zeichen ausgewertet und müssen daher escaped werden: \( und \).
Andernfalls gibt's ne Fehlermeldung.

Beispiel:
Code:
sed -Ee '32s/[[:digit:]]{3,4}( x )[[:digit:]]{3,4}/1920\11050/'
oder
sed -e '32s/[[:digit:]]{3,4}\( x \)[[:digit:]]{3,4}/1920\11050/'

In diesem Fall kein großer Vorteil.
Wenn das Suchmuster aber so aussehen muss, ...
Code:
sed -Ee '32s/(Name="optiongrfxres">)[[:digit:]]{3,4}( x )[[:digit:]]{3,4}/\11920\21050/'

Man kann viel Spass mit diesen Dingen haben.
Andere lösen in Ihrer Freizeit Sudokus, wir entwickeln Suchmuster und Ersetzungen :D.

Noch besser ist der hier:
Code:
sed -Ee '/optiongrf[xyz]res/s/(Name="optiongrf[xyz]res">)[[:digit:]]{3,4}( x )[[:digit:]]{3,4}\
/\11920\21050/'

Wer möchte, kann den ja mal mit der Datei im Anhang ausprobieren.

Gruß
maceis
 
  • Gefällt mir
Reaktionen: ruerueka und pfannkuchen2001
Zurück
Oben Unten