Fichier renommé avec des crochets

0

J'utilise macOS X, en le saisissant dans le terminal pour renommer des éléments:

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject()/newObject("green")/g;' {} \;

Qui devrait tout renommer:

getGreenObject()

avec

newObject("green")

mais cela a eu pour effet de remplacer getGreenObject () par ceci:

newObject("green")()

ce qui a entraîné des tonnes d'erreurs. Il semble que la commande ne reconnaisse pas "()" les crochets ouverts et fermés?

Comment puis-je réparer toutes ces erreurs maintenant avec la même commande?

kay
la source

Réponses:

1

Les parenthèses sont traitées comme faisant partie de la syntaxe d'expression régulière (elles indiquent que leur contenu doit être traité comme un groupe) plutôt que comme des caractères littéraux à rechercher. Pour indiquer à l'analyseur d'expression régulière de les traiter comme des caractères littéraux, vous pouvez les échapper avec des barres obliques inverses:

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject\(\)/newObject("green")/g;' {} \;

Maintenant: avez-vous une sauvegarde antérieure à celle-ci, afin que vous puissiez revenir en arrière et essayer à nouveau? Lorsque vous effectuez un changement en masse comme celui-ci, vous devez toujours vous assurer que votre sauvegarde est à jour (vous avez une sauvegarde, n'est-ce pas?) Et effectuer également un petit test avant de le lâcher sur votre base de code principale.

Si vous n'avez pas de sauvegarde sur laquelle retourner, vous pouvez probablement le réparer comme ceci:

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/newObject\("green"\)\(\)/newObject("green")/g;' {} \;

Notez que j'ai dit probablement. Les mêmes recommandations s'appliquent ici: assurez-vous d'abord d'avoir une sauvegarde à jour et testez-la d'abord sur quelques fichiers. Je ne suis pas responsable si cela déchiquette de façon irréversible votre base de code.

Gordon Davisson
la source