Textschablone
Stream-Editor sed
Direkt in die Datei
Wie schon erwähnt, verändert sed standardmäßig nicht das Original, sondern schreibt seine Ausgabe nach stdout. Haben Sie sich überzeugt, dass alle Veränderungen übernommen werden sollen, können Sie die Ausgabe umleiten. Mit dem Operator > schreiben Sie beispielsweise das Ergebnis in eine Datei:
sed -f skript datei > neuedatei
Sollen die Veränderungen ohne Umweg direkt im Original landen, bringt sed dafür den Parameter -i mit. So führt das Kommando
sed -i -f aufgaben datei
dazu, dass sed die Datei mit den Änderungen direkt überscheibt. Auch eine automatische Sicherungskopie erstellt der Parameter auf Wunsch: Fügen Sie einfach direkt an die Option die Dateiendung an, welche das Backup tragen soll:
sed -i.bak -f aufgaben datei
Neben datei – mit den Änderungen – finden Sie anschließend auch das Original unter dem Namen datei.bak im Verzeichnis.
Kombinationsgabe
Besonders praktisch erweist sich sed in Zusammenhang mit anderen Programmen auf der Kommandozeile. Angenommen, in einem Verzeichnis liegen mehrere Dateien mit Leerzeichen und Bindestrichen im Namen, die Sie gerne in Unterstriche umwandeln möchten:
$ ls -1 *.mp3 01 Saor_Free_News from Nowhere.mp3 02 Whirl-Y-Reel.mp3 …
Schreiben Sie in diesem Fall die verschiedenen Ersetzungsregeln für sed einfach in ein Skript:
s/ /_/g s/-/_/g
Natürlich könnten Sie die beiden Zeilen zu einem einzigen regulären Ausdruck s/[ -]/_/g zusammenfassen – das ist für das aktuelle Beispiel aber irrelevant. Das Skript lassen Sie zunächst testweise auf die Dateien los, um zu überprüfen, ob im Ernstfall alles richtig ersetzt wird. Da sed von der Standardeingabe lesen kann, können Sie die Ausgabe des ls-Kommandos also direkt über eine Pipe an den sed-Befehl weiterreichen:
$ ls -1 *.mp3 | sed -f skript 01_Saor_Free_News_from_Nowhere.mp3 02_Whirl_Y_Reel.mp3
Alles richtig? Nun kombinieren Sie das Programm mv zum Umbenennen mit dem Befehl. Damit sed direkt alle Dateien auf einmal erfasst, basteln Sie eine kleine for-Schleife:
$ for i in *.mp3; do mv -v "$i" `echo $i | sed -f skript`; done `01 Saor_Free_News from Nowhere.mp3' -> `01_Saor_Free_News_from_Nowhere.mp3' `02 Whirl-Y-Reel.mp3' -> `02_Whirl_Y_Reel.mp3'
Im Klartext heißt das: Für alle Dateien, die auf *.mp3 enden, mache Folgendes: Verschiebe diese sichtbar in das Ergebnis der sed-Operation. Da in den Original-Dateinamen Leerzeichen enthalten sind, müssen Sie $i in Anführungszeichen einschließen.
Glossar
Standardeingabe
Linux kennt drei Standardkanäle – "stdin" (Standardeingabe), "stdout" (Standardausgabe) und "stderr" (Standardfehlerausgabe). Laufende Programme erwarten ihren Input von der Standardeingabe, meist über die Tastatur. Die Ausgabe der Programme sehen Sie in der Standardausgabe, also am Bildschirm. Die Standardfehlerausgabe landet in der Regel in der aktiven Konsole: Hier sehen Sie eventuelle Fehlermeldungen des Befehls mit Hinweisen, die zur Problemlösung führen können.
Standardausgabe
Linux kennt drei Standardkanäle – "stdin" (Standardeingabe), "stdout" (Standardausgabe) und "stderr" (Standardfehlerausgabe). Laufende Programme erwarten ihren Input von der Standardeingabe, meist über die Tastatur. Die Ausgabe der Programme sehen Sie in der Standardausgabe, also am Bildschirm. Die Standardfehlerausgabe landet in der Regel in der aktiven Konsole: Hier sehen Sie eventuelle Fehlermeldungen des Befehls mit Hinweisen, die zur Problemlösung führen können.



