Administratoren und Anwender müssen im Alltag oft nach bestimmten Wörtern in großen Dateien oder einer Menge von vielen kleinen Dateien suchen, beispielsweise Log- oder Konfigurationsdateien. Mit dem Tool sed bietet eine Lösung zum Suchen und Ersetzen von bestimmten Zeichenfolgen.
Auf Linux Systemen habe ich das Programm bisher wie folgt genutzt, was auf dem MAC jedoch nur Fehlermeldungen hervorgerufen hat:
sed -i 's/<alter Begriff>/<neuer Begriff>' /<Pfad>/<Datei>
Für eine Menge von Dateien kombinieren wir sed mit find:
find /<Pfad>/<Dateien> -type f -exec sed -i 's/<alter Begriff>/<neuer Begriff>/g' {} \;
Folgende Fehlermeldungen erheilt ich bei meinen Versuchen:
sed: 1: "foo.xml ...": command a expects \ followed by text
sed: 1: "foo.xml ...": extra characters at the end of h command
Lösung Backup beim Ersetzen angeben:
sed -i .bak 's/<alter Begriff>/<neuer Begriff>' /<Pfad>/<Datei>
Für eine Menge von Dateien entsprechend kombiniert mit find:
find /<Pfad>/<Dateien> -type f -exec sed -i .bak 's/<alter Begriff>/<neuer Begriff>/g' {} \;
Erklärung der Optionen von find und sed:
find
- type f: Besagt, dass nach Dateien gesucht wird
- exec: Führt einen Befehl im aktuellen Arbeitsverzeichnis, jenes von dem find aufgerufen wurde.
sed
- -i : Der Text wird in der Datei geändert und nicht auf STOUT ausgegeben
Weitere Fehler
An dieser Stelle Liste ich weitere Fehler, welche mir in der Arbeit mit SED begegnet sind und beschreibe deren Auswirkungen:
sed: RE error: illegal byte sequence
Zunächst dache ich SED würde an dieser Stelle gar nicht mehr arbeiten. Letztendlich erstellte SED mir etliche Kopien meiner Dateien. Nur eine der Dateien besaß das falsche Format – zum Glück die letzte, so dass alles bearbeitet wurde. Für diesen Fehler habe ich auch einige Workarounds gefunden. Die Fehlermeldung wurde jedoch weiter angezeigt.