sed

Mit sed lassen sich vielfältige Aufgaben in Textdateien ausführen, vor allem im Bereich Suchen und Ersetzen. An dieser Stelle habe ich einige Befehle aufgelistet, nicht zuletzt um diese Seite als Notizzettel zu verwenden.

Auswahl eines Textes zwischen Ausdrücken

INHALT=`sed -n '/Anfang/,/Ende\|das wars/p' ocr.txt | sed '1d' | sed '$d'`

Quelltdatei für den Text ist die Datei ocr.txt. Mit diesem Code wird alles in die Variable INHALT gespeichert, was zwischen Anfang und entweder Ende oder das wars steht, je nachdem welcher der beiden Begriffe als erstes (bzw. überhaupt) auftaucht. Die Pipe (das Zeichen | ) stellt in sed im Suchbegriff das logische ODER dar, muss aber (wie auch andere Steuerzeichen) maskiert werden. Da aber der Ausdruck sed -n '/Anfang/,/Ende\|das wars/p' ocr.txt die beiden Suchbegriffe mit beinhaltet, möchte ich diese noch löschen. Da sie bei mir jeweils in einer eigenen Zeile stehen ist dies recht einfach; ich lösche mit sed '1d' die erste und mit sed '$d' die letzte Zeile der Auswahl. Somit habe ich nur den Text der zwischen den Suchausdrücken steht in der Auswahl.

Suchbegriff in allen Dateien eines Ordners ersetzen

Mit folgendem Code werden alle txt-Dateien im aktuellen Ordner in dem man sich befindet auf den Begriff danger durchsucht und dieser durch das Wort gefahr ersetzt:

for x in $(find . -type f -iname "*.txt"); do sed -i -e 's/danger/gefahr/g' $x; done

Text einer Datei vorbereiten um diesen in einem automatisierten Script zu verwenden

Ich habe eine Textdatei mit einigen Zeilen Inhalt (zu viele um sie schnell von Hand zu bearbeiten). In einem Bash-Script möchte ich in einer Schleife diesen Text viele Male ausgeben, was mittels echo ja problemlos geht. Um nicht per Hand am Anfang und Ende jeder Zeile die Kommandos für den echo-Befehl eingeben zu müssen, führe ich schnell folgende Zeilen im Terminal aus:

sed -i "s/^/echo \"/" datei.txt
sed -i "s/$/\" \>\> ausgabe.txt/g" datei.txt
sed -i "s/\"\" //g" datei.txt

Zeile 1 fügt am Anfang jeder Zeile den Text echo „ ein.

Zeile 2 fügt am Ende jeder Zeile den Text “ » ausgabe.txt

Zeile 3 ändert den Inhalt von Leerzeilen des ursprünglichen Textes von echo „“ » ausgabe.txt auf echo » ausgabe.txt ab (ein bisschen Ästhetik im Code muss ja auch sein ;-))

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information