Ordnerübergreifendes Suchen und Ersetzen in der Bash

Wer kennt es nicht: In einer größeren Anzahl von Dateien in verschiedenen Unterordnern soll ein bestimmtes Wort/ eine Wortgruppe ausgetauscht werden. Prinzipiell eine eher unschöne Situation, die leicht in Arbeit ausarten kann- und das kann ja nun wirklich niemand wollen. Doch halt, Rettung ist in Sicht: In der Bash geht das ordnerübergreifende Suchen und Ersetzen kinderleicht und superschnell. Alles, was dafür gebraucht wird sind die Befehle find und sed sowie der Parameter xargs, der hier auch schon einmal vorgestellt wurde.

Der konkrete Fall

In meinem Fall handelte es sich um eine Textänderung: Der String „Senderwahl“ sollte in sehr, sehr vielen .hbs-Dateien zu „Senderauswahl“ geändert werden.

Den Suchstring finden und ersetzen

find macht genau das, was der Name vermuten lässt: Es findet Dateien und Ordner in einem Verzeichnis. sed ist ein skriptgesteuerter Texteditor zum Bearbeiten von Datenströmen.

$ find . -name "*.hbs" -print | xargs sed -i 's/Senderwahl/Senderauswahl/g'

Im ersten Teil geben wir sämtliche .hbs-Dateien im gerade aktiven Ordner und allen Unterordnern als Liste aus (-p-Parameter). Das Ergebnis dieser Ausgabe wird mittels xargs an den Streameditor sed übergeben, der in den gefundenen Dateien (-i-Parameter) alle Vorkommen von „Senderwahl“ gegen „Senderauswahl“ austauscht.

Links

find manpage
sed manpage


Beitrag veröffentlicht

in

von

Schlagwörter:

Kommentare

Kommentar verfassen