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.
Kommentar verfassen