2010-03-26 10 views
24

Ich habe eine umbenannte js-Datei, die ich auf jeder meiner PHP-Seite aufrufen muss. Jetzt möchte ich diesen alten Namen durch den neuen mit Shell ersetzen. mit was iam ist dies: -Ersetzen Sie einen bestimmten Text in allen Dateien mit Shell Shell Befehl

sed -i ’s/old/new/g’ * 

aber die folgenden Fehler geben: -

sed: -e expression #1, char 1: unknown command: 

jetzt, wie kann ich diesen Austausch zu tun ??

Antwort

24

Es gibt wahrscheinlich weniger ausführlich Lösungen, aber hier gehen wir:

for i in *; do sed -i 's/old/new/g' "$i"; done 

Wohlgemerkt, es wird nur auf der aktuellen Ebene des Dateisystems arbeiten, Dateien in einem Unterverzeichnis wird nicht geändert werden. Vielleicht möchten Sie auch * durch * .php ersetzen oder Backups erstellen (übergeben Sie ein Argument nach -i, und es wird eine Sicherung mit der angegebenen Erweiterung erstellt).

+0

hmm. auf OSX bekam 'Befehl erwartet \ gefolgt von Text – jamescampbell

-2

Versuchen Sie folgendes:

ls | grep "php" > files.txt 
for file in $(cat files.txt); do 
    sed 's/catch/send/g' $file > TMPfile.php && mv TMPfile.php $file 
done 
+2

ls/grep/cat sind nutzlos. 'für Datei in * .php; do ....; done' – ghostdog74

+1

Ich weiß nichts über nutzlos - aber es ist ein sehr hässlicher Ansatz, dann gibt es die Tatsache, dass feste temporäre Dateiname (files.txt, TMPfile.php) verwendet Wird unterbrochen, wenn Nebenläufigkeit auftritt. – symcbean

3
perl -pi -e 's/old/new/g' *.php 
+0

habe einen Fehler auf OSX 'zsh: Argumentliste zu lang: perl' – jamescampbell

+0

Nur getestet auf zsh OSX und funktioniert für mich. – radio4fan

40
sed -i.bak 's/old/new/g' *.php 

es zu tun rekursiv

find /path -type f -iname '*.php' -exec sed -i.bak 's/old/new/' "{}" +; 
+0

Dies gibt den Fehler "FIND: Ungültiger Schalter" –

8

Sie verwenden Unicode Apostrophe (RIGHT Apostroph - u2019) anstelle von ASCII (0x27) Apostroph um Ihr sed Befehlsargument.

0

dieses ist sehr einfach, ohne oder eine Schleife, ein kümmern sich um eine beliebige Anzahl oder verschachtelten Verzeichnissen

grep -rl oldText [folderName-optional] | xargs sed -i s/oldText/newText/g