Frage

Wie finde ich und eine Zeichenfolge auf der Kommandozeile in mehreren Dateien auf Unix ersetzen?

War es hilfreich?

Lösung

Es gibt viele Möglichkeiten .Aber eine der Antworten wäre:

find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'

Andere Tipps

Wie die Zombie-Lösung (und schneller Ich gehe davon aus), aber mit sed (Standard bei vielen Distributionen und OSX) anstelle von Perl:

find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'

Dies ersetzt alle foo Vorkommen in Ihrer Python-Dateien unterhalb des aktuellen Verzeichnisses mit bar und eine Sicherung für jede Datei mit dem .py.bak erstellen Erweiterung.

Und entfernen de bak Dateien:

find . -name "*.bak" -delete

Ich habe immer, dass mit ed Skripte oder Ex-Skripte .

for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof

Die Ex Befehl ist nur die:. Zeilenmodus von vi

Unter Verwendung finden und Sed mit Namen oder Verzeichnissen mit Leerzeichen verwenden diese:

find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'

mit den letzten Bash-Shell, und vorausgesetzt, Sie brauchen nicht Verzeichnisse zu durchqueren

for file in *.txt
do
while read -r line
do
    echo ${line//find/replace} > temp        
done <"file"
mv temp "$file"
done 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top