Ersetz Dich!
sed
Zeilenweise?
Noch genauer treffen Sie die einzelnen Zeilen durch Voranstellen der Zeilennummer. Soll nur in der ersten Zeile gesucht und ersetzt werden, stellen Sie eine "1" voran: '1s/huhnix.net/huhnix.org/g' – auch hier ist das g wieder wichtig, falls der String mehr als einmal in der ersten Zeile vorkommt. Sollen gleich mehrere Zeilen ausgewählt werden, z. B. 1 bis 20, heißt der Befehl '1,20s/huhnix.net/huhnix.org/g'. Entsprechend lassen sich Zeilen ausschließen. Der Aufruf '5-15!s/huhnix.net/huhnix.org/g' wird Ersetzungen in der gesamten Datei bis auf die Zeilen 5-15 vornehmen.
Gescriptet
Zusammen mit der Option -f kann in der Eingabezeile auf Befehle verzichtet und stattdessen ein Skript mit sed-Kommandos gestartet werden. In so einer Datei sammeln Sie mehrere Befehle, die dann nacheinander auf die Eingabe angewendet werden. Nehmen wir an, in einem Verzeichnis liegen mehrere MP3s, deren Dateinamen Ihnen nicht gefallen:
huhn@asteroid:~$ ls 01.%20Welcome%20To%20Cabaret.mp3 02.%20Natives.mp3 03.%20Fairytale%20In%20York.mp3 04.%20Delirium%20Tremens.mp3 05.%20Black%20Is%20The.mp3 06.%20Missing%20You.mp3 07.%20Cliffs%20of%20Dooneen.mp3 …
Es sollen nun alle Punkte hinter den Track-Nummern und die "%20"-Einträge durch Unterstriche ersetzt werden. Dieses sind zwei getrennte sed-Aufrufe, die Sie nun hintereinander in eine solche Skript-Datei schreiben:
s/\.%20/_/g s/%20/_/g
Beachten Sie den Backslash vor dem Punkt: Wie Sie aus dem kurzen Ausflug ins Land der regulären Ausdrücke wissen, steht der Punkt normalerweise für ein beliebiges Zeichen. Ließe man den Backslash weg, würde nun jedes Zeichen vor "%20" angesprochen und ebenfalls entfernt. So wird nun zunächst nach einem "." vor "%20" gesucht und der Gesamtausdruck durch "_" ersetzt – in einem zweiten Durchlauf werden die restlichen "%20" ohne vorangehenden Punkt bearbeitet.
Speichern Sie das Skript unter einem beliebigen Namen, z. B. script. Da sed von der Standardeingabe liest, stellen Sie dem Skript noch ein ls *.mp3 und ein Pipe-Zeichen voran:
huhn@asteroid:~$ ls *.mp3 | sed -f script 01_Welcome_To_The_Cabaret.mp3 02_Natives.mp3 03_Fairytale_In_York.mp3 …
Sind Sie mit den neuen Dateinamen einverstanden und wollen die Dateien entsprechend umbenennen, muss in den Aufruf noch ein weiterer Befehl integriert werden: Das Kommando mv (für englisch "move"). Eine kleine for-Schleife verarbeitet direkt alle Dateien:
huhn@asteroid:~$ for file in *.mp3; do mv -v $file `echo $file | sed -f script`; done `01.%20Welcome%20To%20The%20Cabaret.mp3' -> `01_Welcome_To_The_Cabaret.mp3' `02.%20Natives.mp3' -> `02_Natives.mp3' …
Im Klartext heißt das: Für alle Dateien, die auf "*.mp3" enden, mache Folgendes: Verschiebe diese für den User sichtbar in das Ergebnis der sed-Operation.
Glossar
stdin
Es gibt drei "Standardkanäle" für Ein- und Ausgabe, stdin (Standardeingabe), stdout (Standardausgabe) und stderr (Standardfehlerausgabe). Ein Benutzer hat z. B. die Tastatur als Standardeingabe und den Bildschirm als -ausgabe. Wenn man eine Datei mit zcat ("gzip -d -c") dekomprimiert, dann wird sie, sofern sie nicht umgeleitet wird, auf den Bildschirm ausgegeben. Leitet man diese mit einer Pipe (|) um, dient sie dem lesenden Programm wiederum als Standardeingabe.
stdout
Es gibt drei "Standardkanäle" für Ein- und Ausgabe, stdin (Standardeingabe), stdout (Standardausgabe) und stderr (Standardfehlerausgabe). Ein Benutzer hat z. B. die Tastatur als Standardeingabe und den Bildschirm als -ausgabe. Wenn man eine Datei mit zcat ("gzip -d -c") dekomprimiert, dann wird sie, sofern sie nicht umgeleitet wird, auf den Bildschirm ausgegeben. Leitet man diese mit einer Pipe (|) um, dient sie dem lesenden Programm wiederum als Standardeingabe.
Pager
Ein Programm, das die Bildschirmausgabe eines anderen Programms abfängt und seitenweise anzeigt. Die beiden Pager less und more sollten auf jeder Linux-Distribution installiert sein.



