Dans votre vie quotidienne de développeur et/ou d'administrateur système vous êtes sans doute confronté à la nécessité de rechercher et remplacer des motifs par lots.
L'utilisation conjointe d'une multitude d'outils le permettent efficacement sous GNU/Linux : find, grep, sed, awk, perl, diff, patch... Votre éditeur préféré possède sans doute également ce type de fonctionnalité.
Le remplacement doit parfois être assorti d'une vérification visuelle et d'une validation manuelle des différentes occurrences. Si vous changez l'intégralité de vos serveurs de nom dans les fichiers de zone de BIND, vous ne souhaitez sans doute pas qu'un de vos sites à la configuration tordue ne fonctionne plus ?
Partant de ce constat, mon collègue Zas[1] a sympathiquement concocté un script en pure bash habilement nommé search_replace ! C'est un savant mélange de find, sed, awk, diff(color) et patch qui a l'avantage de la simplicité (3 ko tout mouillé).
Comment ça marche ?!
- On recherche un pattern donné sur un répertoire (exemple, la chaine « ma chaine » sur les fichiers .php du répertoire /var/www)
- Pour chaque occurrence, un diff - en couleur, si vous avez installé colordiff - et dans le contexte vous permet de visualiser les changements qui seront appliqués
- A chaque étape, vous choisissez :
- d'accepter ou pas cette modification et de passer à l'occurrence suivante
- de modifier manuellement via
votre éditeur préféréVIM - d'annuler les actions en cours
- Vous pouvez bien sur choisir de remplacer le tout sans confirmation ni vérification
- Au final, vous choisissez d'appliquer les modifications ou de garder le patch pour plus tard.
- Cerise sur le pompon, l'utilisation du patch vous permet de revenir sur les modifications si vous avez tout cassé !
Télécharger search_replace (tar.gz / 3ko)

