ADMIN-Tipp: Suchen und Ersetzen in vielen Dateien

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Lang, lang ist's her, da gehörte Perl zum unverzichtbaren Werkzeug eines jeden Unix-Administrators. Viele kleine Aufgaben lassen sich damit immer noch am schnellsten erledigen.

Als man mir vor vielen Jahren die Aufgabe übertrug, eine Website von einem Rechner auf eine andere zu migrieren, begann ich gerade Linux-Erfahrungen zu sammeln und mich mit den vielen kryptischen, oft nur zwei Buchstaben langen Kommandos vertraut zu machen. Als ich irgendwann zu dem Punkt kam, an dem ich in vielen HTML-Dateien immer wieder die gleichen Strings ersetzen musste, fragte ich einen Freund um Hilfe, der mir einen Tipp gab, der mir zuerst umständlich erschien. Bis heute habe ich dafür keinen besseren Ersatz gefunden, und so setze ich die kleine Perl-Formel immer wieder ein, wenn ich vor dem gleichen Problem stehe.

Der Schlüssel liegt darin, dass sich dem Perl-Interpreter zum einen kleine Skripts direkt als Argument übergeben lassen (-e) und zum anderen, dass Perl eine Menge Ankürzungen kennt, die man in anderen Sprachen erst programmieren müsste, so zum Beispiel eine Schleife über alle aus einer Datei gelesenen Zeilen (-p). Gleichzeitig gibt es noch einen Schalter, der dafür sorgt, dass das Skript eventuelle Ersetzungen direkt in der Datei vornimmt (-i).

Um damit in allen HTML-Dateien des aktuellen Verzeichnisses den String "black" durch "white" zu ersetzen, verwendet man den folgenden Aufruf:

perl -i -pe 's/black/white/g' *.html

Zwischen den Schrägstrichen stehen Regular Expressions, in denen sich die entsprechenden Sonder- und Steuerzeichen verwenden lassen, die Perl bietet. Der abschließende Modifier 'g' sorgt dafür, dass der String auch einer Zeile ersetzt wird, in der er zweimal vorkommt. Alternativ oder ergänzend wäre an dieser Stelle etwa auch 'i' möglich, um Groß- und Kleinschreibung zu ignorieren.

Um die obige Ersetzung auch in Unterverzeichnisse vorzunehmen, kombiniert man den Perl-Ausdruck mit dem Find-Befehl:

find . -name '*.html' | xargs perl -i -pe 's/black/white/g'

Wer auf Nummer sicher gehen und von den bearbeiteten Dateien vorher ein Backup anlegen will, kann dies übrigens sehr einfach tun, indem er hinter den Schalter '-i' eine Dateiendung schreibt, etwa 'perl -i.bak -pe ...'

29.01.2013

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Loadtests ohne Server

Für Loadtests der eigenen Server bietet sich die Cloud an, denn kurz getaktet lassen sich dort viele Rechnerinstanzen starten, die das eigene Budget nur wenig belasten. Noch flexibler, günstiger und besser skalierbar sind Tests mit einer Serverless-Infrastruktur wie AWS Lambda. Wir führen vor, wie Sie dort mit Serverless Artillery eigene Loadtests starten. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018