43 Stimmen

Suchen und Ersetzen in mehreren Dateien auf der Kommandozeile

Wie finde und ersetze ich eine Zeichenkette auf der Kommandozeile in mehreren Dateien unter Unix?

51voto

Vijay Punkte 62277

Es gibt viele Möglichkeiten, aber eine der Antworten wäre:

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

37voto

Stan Punkte 8234

Wie die Zombie-Lösung (und schneller, nehme ich an), 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 Ihren Python-Dateien unterhalb des aktuellen Verzeichnisses mit bar und erstellen Sie für jede Datei ein Backup mit der Option .py.bak Erweiterung.

Und um die .bak-Dateien zu entfernen:

find . -name "*.bak" -delete

7voto

DigitalRoss Punkte 138823

Das habe ich immer mit ed-Skripte o Ex-Skripte .

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

El ex Befehl ist nur der : Zeilenmodus von vi.

7voto

XavierCLL Punkte 1033

Bei Verwendung von find und sed mit Namen oder Verzeichnissen mit Leerzeichen wird dies verwendet:

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

2voto

ghostdog74 Punkte 305138

Mit aktueller Bash-Shell und unter der Annahme, dass Sie keine Verzeichnisse durchqueren müssen

for file in *.txt
do
while read -r line
do
    echo ${line//find/replace} > temp        
done <"file"
mv temp "$file"
done

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X