string rekursiv in dateien ersetzen mit sed

wieder mal ein shell-snippet – diesmal zum suchen und ersetzen von text/wörtern in mehreren dateien und unterordnern.

der find befehl findet alles rekursiv und sed ersetzt den string inplace – also input output identisch.

# ein einfaches beispiel:

find . -type f -print0 | xargs -0 -n 1 sed -i -e "s/suche/ersetze/g"

Begriffe in Dateien ersetzen:

Ersetzen von Text in einer Datei:

sed s/Anton/Berta/g Textdatei

Jedes Auftreten von "Anton" wird durch "Berta" ersetzt (aber auch "Antonius" wird zu "Bertaius"). Wird g (global) weggelassen, wird nur das erste Auftreten in einer Zeile ersetzt.

sed /Name/s/\bAnton\b/Berta/g Textdatei

Alle Wörter "Anton" werden durch "Berta" ersetzt (nicht "Antonius"), aber nur in Zeilen, die "Name" enthalten.

sed -n s/Anton/Berta/gp Textdatei

Ersetzt alle "Anton" durch "Berta" und gibt nur die betroffenen Zeilen aus.

Entfernen von Zeilen:

sed '/^#/d' Textdatei

Zeilen die mit # anfangen, werden entfernt.

Zeilen einfügen:

sed '3iNeue Zeile' Textdatei

Vor der dritten Zeile wird "Neue Zeile" eingefügt.

sed '4aNeue Zeile' Textdatei

Hier wird "Neue Zeile" nach der vierten Zeile eingefügt.

Reguläre Ausdrücke:

sed 's/^E-Mail:.*$/E-Mail-Adresse ist privat/' Textdatei

Alle Zeilen, die mit "E-Mail:" anfangen, werden ersetzt.

Bearbeiten von Dateinamen:

sed 's!/home/anton/!/home/berta/!' Textdatei

Normalerweise wird "/" als Trennzeichen verwendet. Es lässt sich aber beliebig austauschen, was beim Bearbeiten von Dateinamen nützlich ist.

mehr unter: http://sed.sourceforge.net/sed1line_de.html