Suchen- und Ersetzen-Befehl für das gesamte Verzeichnis

Suchen- und Ersetzen-Befehl für das gesamte Verzeichnis

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 .bakfü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.bakin -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 grepnach 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

verwandte Informationen