Tout d'abord, assurez-vous que vous utilisez des guillemets ascii réguliers comme "
et '
(codes ascii 0x22
et 0x27
, respectivement) dans les scripts shell, car l'exemple de votre message contient des guillemets non standard. Si vous regardez attentivement, ils ont l'air un peu différents. Il s'agit très probablement d'une erreur de copier-coller à partir d'un format de document texte riche comme Word, OOWriter ou même une fenêtre de navigateur.
Puisque vous êtes sur un Mac, vous avez probablement l'implémentation de FreeBSD sed
, auquel cas vous devez écrire la commande de cette façon:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(ici en utilisant +
au lieu de \;
pour éviter d'exécuter une sed
invocation par fichier).
Dans l'implémentation de FreeBSD, sed
l' -i
indicateur a besoin d'un argument: l'extension d'un fichier de sauvegarde. Par exemple, -i .bak
la commande sauvegardera file1.txt
en file1.txt.bak
premier avant d'effectuer le remplacement dans le fichier d'origine. L'utilisation d'un argument vide ''
signifie de ne pas utiliser de fichier de sauvegarde, ce qui semble être ce que vous voulez.
La même chose dans l'implémentation GNU (ou NetBSD, OpenBSD, busybox) serait:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Merci @bahamat et @Mikel et @ pieter-race d' avoir amélioré ma réponse avec vos commentaires.
-exec
et tout ce qui se trouve après? Imprime-t-il les noms des fichiers Java? (Je crains que vous n'utilisiez des guillemets intelligents au lieu de guillemets ASCII.)