Suchen und Ersetzen in Dateien

Datum: 2004-05-13
Quelle: suse-linux

Worum ging es?

In bestimmten Dateien soll "web1" durch "chaos" ersetzt werden. Ich habe zu meinen Vorschlägen von 2004 noch ein paar Varianten ergänzt, die aus heutiger Sicht passender sind.

Code
# 1. benannte Dateien / named files
for f in .shtml .html .cgi .pl; do
  sed 's/web1/chaos/g' "$f" >"${f}.tmp" && mv "${f}.tmp" "$f"
done
# 2. nach Endung rekursiv / depending on suffix recursive
for suffix in .shtml .html .cgi .pl; do
  find /directory -name "*$suffix" -print | while read f; do
    sed 's/web1/chaos/g' "$f" >"${f}.tmp" && mv "${f}.tmp" "$f"
  done
done
# 1. neu / new
sed -i 's/web1/chaos/g'  file1.html file2.html file3.cgi;
# 2. neu / new
for suffix in .shtml .html .cgi .pl; do
  find /directory -name "*$suffix" -print | \
    xargs sed -i 's/web1/chaos/g'
done
Beschreibung

Die "alten" Varianten rufen je Datei einen sed auf, dessen Ergebnis in einer temporären Datei gespeichert wird. Diese wird bei Erfolg zurück in den alten Dateinamen umbenannt. Die beiden aktuellen Varianten nutzen die Option -i des sed, die in-Place-Editieren erlaubt und verarbeiten mehrere Dateien je Aufruf.