Ich verwende gelegentlich das Werkzeug SED um Dateien mittels
Skripten zu modifizieren. Beispielsweise kann ich mit sed -i 's/Ulrich/Uli/g' mein-profil.txt
in der Datei “mein-profil.txt” global die Zeichenkette “Ulrich” durch “Uli”
ersetzen. Etwas komplizierter wird’s, wenn ich “/etc/passwd” durch “/my-etc/hidden-passwd”
ersetzen möchte, weil “/” eine Sonderrolle einnimmt zur Begrenzung der Zeichenketten.
Suchen und Ersetzen
Bei Suchen und Ersetzen mit “s” kann man einfach ein anderes Zeichen für die “Sonderrolle” wählen, wenn der Schrägstrich bei Suchen und/oder ersetzen enthalten ist. Das gewählte Zeichen darf natürlich auch nicht enthalten sein:
- Standardfall:
sed -i 's/Ulrich/Uli/g' mein-profil.txt
- Schrägstrich bei Suchen und/oder Ersetzen:
sed -i 's!/etc/passwd!/my-etc/hidden-passwd!g' mein-skript.sh
Bereiche
Bei der Angabe von Bereichen ist die Vorgabe eines anderen Zeichens etwas komplizierter. Bereiche beginnen üblicherweise ja direkt mit dem Schrägstrich. Beispiele:
1,/--END/
… alles von Zeile 1 bis “—END”/--BEGIN/,/--END/
… alles zwischen den Zeilen mit “—BEGIN” und “—END”
Bei Bereichen kann ein anderes Zeichen für die Suche vorgegeben werden, indem ein Rückschrägstrich \
vorangestellt wird, also:
1,\!--END!
… alles von Zeile 1 bis “—END”\!--BEGIN!,/--END/
… alles zwischen den Zeilen mit “—BEGIN” und “—END”\!--BEGIN!,\!--END!
… alles zwischen den Zeilen mit “—BEGIN” und “—END”
Anwendung beim Löschen von Bereichen:
- Standardfall:
sed -e '/--BEGIN/,/--END/d' beispiel-datei-1.txt
–> Zwei Zeilen:1
und3
- Standardfall:
sed -e '\!/BEGIN!,\!/END!d' beispiel-datei-2.txt
–> Zwei Zeilen:A
undC
beispiel-datei-1.txt
1 2 3 4 5 |
|
beispiel-datei-2.txt
1 2 3 4 5 |
|
Änderungen
- 2021-10-18 – Erste Version