Regular Expression/Suchen & Ersetzen

Aus Foxwiki

Suchen & Ersetzen

Beim reinen s-Befehl werden immer alle Zeilen ausgegeben, unabhängig davon, ob Ersetzungen durchgeführt wurden oder nicht. Dies lässt sich ändern, indem man ihn mit dem p-Befehl kombiniert. Die Abläufe sind wie folgt:

p-Befehl

echo "dies wird nicht ausgegeben" | sed -n '/.*diiss.*/p'

  1. gibt es eine Ergebnismenge, die zur RE "passt"?
  2. wenn ja, gibt die ganze Zeile aus.

s-Befehl ohne p-Befehl

echo "dies wird ausgegeben" | sed 's/wird/wird immer/'

  1. gibt es eine Ergebnismenge, die zur RE "passt"?
  2. wenn ja, welches ist die effektive Ergebnismenge?
  3. ersetze diese durch den Replace-String
  4. gib die ganze Zeile aus (egal, ob geändert oder nicht)

s-Befehl mit p-Befehl

echo -e "xxx\nnächste Zeile" | sed -n 's/xxx/Ausgabe/p'

  1. Die Kombination von s- und p-Befehl bewirkt, dass
  2. nur die geänderten Zeilen ausgegeben werden.
  3. Die Option -n darf nicht vergessen werden.

Im Allgemeinen ist es sinnvoll, den g-Spezifizierer ("global") zu verwenden, der direkt vor oder hinter dem p-Befehl steht:

echo -e "xxx--xxx\nnächste Zeile" | sed -n 's/xxx/Ausgabe/pg'

  1. alle "xxx" werden ersetzt

Ersatzmuster

Bei einigen Tools (ex, sed und ed) werden zwei Muster angegeben: Ein Suchmuster (links) und ein Ersatzmuster (rechts). Nur die folgenden Zeichen sind in einem Ersatzmuster gültig:

ex sed Ed
\ X X X Sonderbedeutung des nächsten Zeichens aufhebe
\n X X X Verwendet das in \( \) gespeicherte Muster erneut
& X X Verwendet das vorherige Suchmuster erneut
~ X Verwendet das vorherige Ersatzmuster erneut
\u X Ändert das erste Zeichen des Ersatzmusters auf Großschreibung
\U X Ändert alle Zeichen des Ersatzmusters auf Großschreibung
\l X Ändert das erste Zeichen des Ersatzmusters auf Kleinschreibung
\L X Ändert alle Zeichen des Ersatzmusters auf Kleinschreibung
\E X Hebt das vorangegangene \U oder \L auf
\e X Hebt das vorangegangene \u oder \l auf