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