Home / LinuxUser / 2002 / 11 / sed

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(161 Punkte bei 4 Stimmen)
Mandriva in Nöten
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

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.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...