2009-10-18 4 views

Antwort

44

Versuchen Sie folgendes: find /home/user/ -type f | xargs sed -i 's/a.example.com/b.example.com/g'

+0

Wird dies die Zeichenfolge in jeder Datei unter/home/Benutzerverzeichnis ersetzen? Unterverzeichnisse einbinden? – Tony

+0

Ja wird es, obwohl Sie eine Art von Muster angeben sollten -Namen "Muster" nach finden – vehomzzz

+0

was meinst du "eine Art Muster"? – Tony

4

Ich weiß, dass dies eine wirklich alte Frage, aber ...

  1. @ Antwort vehomzzz die verwendet find und xargs, wenn die Fragen sagt ausdrücklich grep und sed nur.

  2. @EmployedRussian und @BrooksMoses versuchte, es zu sagen war ein dup von awk und sed, aber es ist nicht - auch hier die Frage ausdrücklich sagt grep und sednur.

So, hier ist meine Lösung, vorausgesetzt, Sie Bash als Shell verwenden:

OLDIFS=$IFS 
IFS=$'\n' 
for f in `grep -rl a.example.com .` # Use -irl instead of -rl for case insensitive search 
do 
    sed -i 's/a\.example\.com/b.example.com/g' $f # Use /gi instead of /g for case insensitive search 
done 
IFS=$OLDIFS 

Wenn Sie eine andere Shell, wie Unix-Shell verwenden, lassen Sie mich wissen und ich werde versuchen, finde eine Syntaxanpassung.

P. S .: Hier ist ein Einzeiler:

OLDIFS=$IFS;IFS=$'\n';for f in `grep -rl a.example.com .`;do sed -i 's/a\.example\.com/b.example.com/g' $f;done;IFS=$OLDIFS 

Quellen:

1

diesen Befehl versuchen:

/home/user/ directory - find ./ -type f \ 
-exec sed -i -e 's/a.example.com/b.example.com/g' {} \; 
+3

Hallo. Bitte nicht nur Code als Antwort ausgeben. Erklären Sie, was Sie tun, damit die Benutzer verstehen, wie sie das Problem lösen können. Prost. – Cthulhu

9

starten:

grep -rl 'SearchString' ./ | xargs sed -i 's/REPLACESTRING/WITHTHIS/g' 

grep -rl sucht rekursiv nach SEARCHSTRING in den Verzeichnissen ./ und ersetzt die Zeichenfolgen mit sed.

Ex:

Ersetzen eines Namens TOM mit JERRYCARTOONNETWORK Suchbegriff als SWATKATS im Verzeichnis mit

grep -rl 'SWATKATS' CARTOONNETWORK/ | xargs sed -i 's/TOM/JERRY/g' 

Dies wird TOM ersetzen mit JERRY in allen Dateien und Unterverzeichnisse CARTOONNETWORK wo immer es die Zeichenfolge findet SWATKATS.

+0

Vielen Dank für diese Antwort, und wie man andere Dateien schreibt, um keine Fehler zu machen? – Marine1

0

Die folgenden Befehl rekursiv alle Dateien, deren Namen Muster passt die Suche suchen und wird die Zeichenfolge ersetzen:

find /path/to/searchdir/ -name "serachpatter" -type f | xargs sed -i 's/stringone/StrIngTwo/g'

Auch wenn Sie die Tiefe der Rekursion beschränken möchten Sie die Grenzen setzen können als gut:

find /path/to/searchdir/ -name "serachpatter" -type f -maxdepth 4 -mindepth 2 | xargs sed -i 's/stringone/StrIngTwo/g'

+0

finden/Pfad/zu/Suchpfad/-name "serachpatter" -Typ f -maxdepth 4 -mindepth 2 | xargs sed -i 's/stringone/StrIngTwo/g' – Akplive139

+0

Bearbeiten Sie in Zukunft Ihre Antwort, anstatt einen Kommentar darunter zu posten. Bitte formatieren Sie den Code entsprechend. Verwenden Sie keinen fett formatierten Text für Code. –