Rekursives Suchen und Ersetzen mit ’sed‘

Funktioniert relativ einfach. Wechsle ins gewünschte Verzeichnis in dem Rekursiv gesucht werden soll, anschließend:

find . -type f -exec sed -ie 's!SUCHSTRING!ERSETZENSTRING!g' {} \;

Punkte sollten dabei escaped werden (. => \.)

Warum ich das ganze gebraucht habe? Vor ein paar Tagen ist ein größeres Java-Projekt, an dem ich beteiligt war, zu Ende gegangen. In diesem Projekt habe ich unter anderem auch ein Trac sowie ein Subversion-Repository gestellt. Da das Projekt nun zu Ende ist und ich gerne potentionelle Sicherheitslücken ausschließe, habe ich mich dazu entschlossen, eine statische Version (da sowieso keine Änderungen mehr vonnöten waren) des Trac’s abzulegen. Hierzu habe ich HTTrack Website Copier verwendet um alle Seiten abzugrasen. Anschließend mussten ein paar URLs angepasst werden, die auf externen Bilder zeigten.

Veröffentlicht von

Uli

IT-Nerd und Admin

7 Gedanken zu „Rekursives Suchen und Ersetzen mit ’sed‘“

  1. Vorsicht, hier wird eine Backup-Datei mit dem angehängten Suffix e (z.B. .php -> .phpe) erzeugt. Das dürfte nicht in jedermanns Interesse sein. Daher in solchen Fällen auf jeden fall -ie weglassen.

    1. Wenn das -e als seperater Parameter angegeben wird, werden keine Backup Dateien angelegt.

      find . -type f -exec sed -i -e 's/SUCHSTRING/ERSETZENSTRING/g' {} \;

    1. Und das -e steht für:

      -e script, --expression=script

      add the script to the commands to be executed

      So kann man mehrere „-e“ hintereinander schalten um mehrere Ersetzungen mit einem Script zu machen 😉
      Der Aufruf oben klappt mit GNU sed bestens 😉

  2. Gesucht, und hier gefunden.

    Hab hier genau die gleiche Problemstellung
    bei meinem WebServer.

    Vielen Dank!

    erspart mir Frickelarbeit & klappt
    (auf den ersten Blick 😉
    einwandfrei!

Schreibe einen Kommentar zu w00dst0ck Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

I accept that my given data and my IP address is sent to a server in the USA only for the purpose of spam prevention through the Akismet program.More information on Akismet and GDPR.