Regular Expression/Suchen & Ersetzen
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'
- gibt es eine Ergebnismenge, die zur RE "passt"?
- wenn ja, gibt die ganze Zeile aus.
s-Befehl ohne p-Befehl
echo "dies wird ausgegeben" | sed 's/wird/wird immer/'
- gibt es eine Ergebnismenge, die zur RE "passt"?
- wenn ja, welches ist die effektive Ergebnismenge?
- ersetze diese durch den Replace-String
- 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'
- Die Kombination von s- und p-Befehl bewirkt, dass
- nur die geänderten Zeilen ausgegeben werden.
- 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'
- 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 |