sed - Stream Editor

Der berühmt, berüchtige sed-Befehl in Linux. Meiner Meinung nach zu Unrecht verflucht, wenn man sein enormes Potential kennt. Und einige verblüffende Resultate gesehen hat.

sed - Stream Editor

Sind Sie bereits einmal in folgendem Szenario konfrontiert gewesen wie ich. In einem Ordner habe ich über 10.000 Dateien, bei denen allen ich die gleiche minimal Änderung vornehme. In meinem Falle sind es 10.000 html-Dateien, also alles Textdateien. Von einer meiner Webseiten. Stellen Sie sich vor sie wollen die Jahresangabe aktualisieren, also dass auf allen Seiten der Internetpräsenz nicht mehr 2020, sondern vielleicht 2021 steht. Diese Aufgabe manuell zu lösen geht bei dieser Anzahl an Dateien sowieso nicht mehr. Darauf das Problem mit einer einzigen Zeile zu lösen und die Enter-Taste zu drücken muss man erst einmal kommen...

Hier ist er also:

der sed - der stream editor

Er ist bereits Jahrzehnte alt - und hat mehr Power den je.

Erklärte Beispiele:

sed '1d' test.txt

Gibt den Inhalt der Datei test.txt aus und löscht dabei die erste Zeile. Das d steht für delete, die 1 für Zeile 1. Die Datei wird zu diesem Zeitpunkt (noch) nicht verändert.

sed -i '2d' test.txt

Die -i Option schreibt die Veränderungen tatsächlich in die Datei zurück (und gibt nichts mehr aus).

oder gleich alle Dateien in einem ganzen Verzeichnis

sed -i '2d' ./testordner/*

Obiger Befehl löscht in allen Dateien im Ordner testordner jeweils die 2. Zeile.

 

Hiermit löschen Sie leere Zeilen in der Zieldatei/ den Dateien:

Delete empty lines or blank lines

sed '/^$/d' datei.txt

 

Nach einem Suchmuster suchen funtioniert so:

sed '/^[A-Z]*$/d' datei

Oben werden alle Zeilen mit einem Grossbuchstaben gelöscht.

 

Alle Zeilen löschen in denen ein Wort vorkommt:

Delete lines that contain a pattern

sed '/debian/d' dateiname

 

Also je nachdem ob Sie die -i Option setzen wird das zugrundeliegende Datei umgeschrieben oder nicht. Wenn sie das nicht möchten (und nicht erst riskieren möchten) bietet sich noch die Möglichkeit die umgeschriebene Datei als eine neue Datei (zusätzlich zum Original) zu erzeugen.

Hier kommt die gute alte Pipe ins Spiel. Ausgabe umleiten in eine neue Datei mit

sed '1d' ursprungsdatei > neuedatei