2009-12-13 13 views

Antwort

41

gibt es viele Möglichkeiten .Aber eine der Antworten würde:

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

Ich habe das mit ed Skripte oder ex-Skripte immer.

for i in "[email protected]"; do ex - "$i" << 'eof'; done 
%s/old/new/ 
x 
eof 

Der ex Befehl ist nur der: Zeilenmodus von vi.

+0

Dies hat den deutlichen Vorteil, dass Sie anspruchsvollere Bearbeitungen durchführen können. – alastair

2

mit den letzten Bash-Shell, und falls 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 
21

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

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

Dadurch werden alle foo Vorkommnissen in Ihrer Python-Dateien unterhalb des aktuellen Verzeichnisses mit bar ersetzen und erstellen Sie eine Sicherung für jede Datei mit der .py.bak Erweiterung.

Und entfernen de bak Dateien:

find . -name "*.bak" -delete 
+0

Dies wirkt sich auf Leerzeichen außerhalb der Suche aus. Es schien am Ende jeder meiner Dateien neue Zeilen hinzuzufügen. – Shane

+0

AFAIK In-Place-Bearbeitung wird nicht in jeder sed-Version unterstützt. Ich denke, es ist eine GNU-Erweiterung. – alastair

+0

es ist eine GNU-Erweiterung und mindestens in meiner Version muss es 'sed-i.bak' (kein Leerzeichen) – friedemann

4

FIND und mit Namen oder Verzeichnisse mit Raumnutzung sed dies:

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