Gibt es in Linux einen Befehl, der ein bestimmtes Wort in allen Dateien in einem bestimmten Verzeichnis und den darunterliegenden Ordnern findet und durch ein neues Wort ersetzt?
Antwort1
Dadurch werden alle Dateien ersetzt. Sie können es genauer festlegen, wenn Sie nur einen bestimmten Dateityp benötigen. Außerdem wird .bak
für den Fall, dass Sie es zurücksetzen müssen, von jeder verarbeiteten Datei eine Sicherungsdatei erstellt. Wenn Sie die Sicherungsdateien überhaupt nicht benötigen, ändern Sie sie -i.bak
in -i
.
find /path/to/directory -type f -exec sed -i.bak 's/oldword/newword/g' {} \;
So entfernen Sie alle Sicherungsdateien, wenn Sie sie nicht mehr benötigen:
find /path/to/directory -type f -name "*.bak" -exec rm -f {} \;
Antwort2
Sie können den folgenden Befehl verwenden:
grep -lR "foo" /path/to/dir | xargs sed -i 's/foo/bar/g'
Es sucht grep
nach Dateien, die die Zeichenfolge „foo“ enthalten, und ruft dann sed auf, um „foo“ in ihnen durch „bar“ zu ersetzen. Dadurch werden nur die Dateien geändert, die „foo“ enthalten. Der Rest der Dateien bleibt unverändert.
Antwort3
Kein einzelner Befehl, sondern eine Kombination aus mehreren:
find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} ;
Beispiel ausHier
Antwort4
Wenn Sie mehr Kontrolle wünschen, können Sie ein Python-Skript wie das folgende verwenden: