J'ai été chargé de remplacer un grand nombre d'identifiants codés en dur dans certains codes (par exemple: private static String MERCHANT_ID = "1234";
) avec des références à un fichier de configuration quelque part (la version remplacée pour cet exemple doit donc être private static String MERCHANT_ID = ConstantMerchants.MERCHANT_A;
).
La fonction de recherche et de remplacement par défaut dans Eclipse aurait ça ira si je ne remplaçais que quelques pièces d'identité, mais je ne le suis pas. J'ai vingt projets, tous contiennent des centaines de fichiers avec plusieurs notations différentes de l'ancienne chaîne.
J'ai déjà compilé une liste de motifs de regex qui correspondent à toutes les notations possibles.
Est-il possible d'utiliser sed pour remplacer toutes les anciennes chaînes par les nouvelles versions en disposant un fichier de configuration quelque part contenant l'ancien modèle, et par quoi il devrait être remplacé?
Je cherche quelque chose qui me permette de définir des motifs avec une nouvelle valeur, pensez à quelque chose de similaire à ceci:
# old | new
/merchantId:\s*("|')1234("|'),/|merchantId: ConstantMerchants.MERCHANT_A
/private static String MERCHANT_ID\s*=\s*("|')1234("|');/|private static String MERCHANT_ID = ConstantMerchants.MERCHANT_A
Si je devais utiliser un autre outil qui pourrait m'aider à mieux résoudre ce problème, j'aimerais en entendre parler. J'aimerais beaucoup utiliser la nouvelle fonctionnalité Bash sur Windows, mais c'est uniquement parce qu'elle a l'air cool :)
sed
commande qui effectue tous les remplacements, en utilisant plusieurs fichiers regex et
sed
vous pouvez utiliser le -e
possibilité de faire autant de substitutions à autant de fichiers que nécessaire en une seule fois, par exemple sed -i -e 's/old1/new1/' -e 's/old2/new2' ... file1 file2 ...
. Si les fichiers ne se trouvent pas tous dans un seul répertoire ou au même niveau dans une arborescence de sous-répertoires, vous permettant de les sélectionner avec une correspondance de caractère générique, vous pouvez utiliser find
et xargs
pour construire la chaîne d'exécution.
sed
syntaxe, ou ne pouvez-vous pas obtenirsed
travailler sur plusieurs fichiers, ou quoi?