it-swarm.com.de

ersetzen Sie einen bestimmten Text in allen Dateien mit einem einzeiligen Shell-Befehl

ich habe eine umbenannte JS-Datei, die ich in jeder meiner PHP-Seite aufrufen muss. Jetzt möchte ich diesen alten Namen durch den neuen Namen ersetzen, indem ich Shell . Benutze.

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

aber dies gibt den folgenden Fehler: -

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

wie kann ich diesen Ersatz tun?

29
developer

Es gibt wahrscheinlich weniger ausführliche Lösungen, aber hier geht es weiter:

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

Allerdings funktioniert es nur auf der aktuellen Ebene des Dateisystems. Dateien in Unterverzeichnissen werden nicht geändert. Möglicherweise möchten Sie * durch * .php ersetzen oder Sicherungen erstellen (übergeben Sie ein Argument nach -i, und es wird eine Sicherung mit der angegebenen Erweiterung erstellt).

26
K. Norbert
sed -i.bak 's/old/new/g' *.php

rekursiv machen

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

Sie verwenden Unicode-Apostrophe (RIGHT SINGLE QUOTATION MARK - U2019) anstelle von ASCII (0x27) Apostrophen um Ihr Befehlsargument sed.

9

dieses ist sehr einfach, ohne for oder loop, und kümmert sich um eine beliebige Anzahl oder verschachtelte Verzeichnisse 

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

5
user7154703
Perl -pi -e 's/old/new/g' *.php
4
radio4fan

Der Vollständigkeit halber wird die OSX-kompatible Version der oben akzeptierten Antwort bereitgestellt (Antwort auf @jamescampbell).

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

Dieser Befehl erstellt .orig Sicherungsdateien.

2
shiramy

Ich weiß, ich bin wirklich spät dran, aber immer noch: 

find . -type f -name "*.php"|xargs sed -i 's/old/new/g'
2
Ziyad

Verwenden Sie doppelte Anführungszeichen

sed -i "s/old/new/g" *
0
Vikas Mulaje