Rechercher et Remplacer, voilà une des fonction d'un éditeur de texte des plus utilisée. C'est super cool, je veux remplacer Bob
par Alice
dans mon super tuto, il n'y a qu'un fichier, facile. Mais voilà, mon tuto est découpé en 20 parties, chacune dans un fichier Il faut donc les ouvrir un par un, et lancer le remplacement.
rpl
permet de faire ça en une ligne de commande, avec pas mal d'options pour affiner un peu, comme :
apt-get install rpl
La syntaxe générale est la suivante
rpl [-LhiwbqvsRepfdt] [-xSUFFIX] ⟨vieille_chaine⟩ ⟨nouvelle_chaine⟩ ⟨fichier_cible ...⟩
Par exemple, si l'on veut remplacer Bob
par Alice
dans les 2 premières parties de mon tuto fictif, après s'être placé dans le dossier contenant les fichiers à traiter :
rpl 'Bob' 'Alice' partie1.txt partie2.txt
On peut bien sûr utiliser les caractères joker, pour traiter tous les fichiers du dossier par exemple :
rpl 'Bob' 'Alice' *
Si les fichiers à visiter ne se situe pas dans le même dossier, on peut indiquer que tous les fichiers sont à visiter :
rpl -R 'Bob' 'Alice' *
Pour voir le résultat sans rien toucher, l'option -s
ou –dry-run
permet de voir les fichiers qui seraient modifiés si besoin
Par défaut, la commande tient compte de la casse.
Pour passer outre ce comportement, utiliser l'option -i
Pour spécifier une extension, on ajoute l'option -x
, qui peut être spécifiée plusieurs fois.
Si tu veux filtrer pour plusieurs extensions ça fonctionne genre pour ne remplacer que dans les fichier txt et html
rpl -R -x'txt' -x'html' 'Bob' 'Alice' *
On peut s'assurer que le motif de recherche se limite à un mot entier avec l'option -w
. Cela permet ainsi de remplacer Bob
par Alice
dans notre tuto mais d'éviter de se retrouver avec un truc qui fait mauvais genre dans votre devoir de Français
Tire la chevillette, et la Aliceinette cherra
Nous allons essayer d'illustrer l'utilisation de rpl et quelques-une de ses options en s'exercant sur quelques fichiers d'exemple
On va préparer un petit environnement d'exemple, avec des fichiers aynat différentes extensions, placés dans différents dossiers. Il suffit de télécharger ce fichier et l'executer (ou appliquer les commandes une par une) :-p
#!/bin/sh cd /tmp mkdir -P test/dossier cd test echo "Bob tire la Bobinette" > f1.txt cp f1.txt f2.html cp f1.txt f3.tex cp f* dossier/
rpl "Bob" "Alice" f1.txt
Replacing "Bob" with "Alice" (case sensitive) (partial words matched) . A Total of 2 matches replaced in 1 file searched.
cat f1.txt
Alice tire la Aliceinette
cat f2.html
Bob tire la Bobinette
cat dossier/f*
Bob tire la Bobinette Bob tire la Bobinette Bob tire la Bobinette
Donc, on a touché uniquement à f1.txt
(puisqu'on l'a explicitement donné en argument). LE fichier f1.txt situé dans /dossier
n'a pas été modifié. Et on voit que toutes les occurences de Bob
on été remplacée, même dans un mot.
Remettons donc les choses comme à l'origine
rpl "Alice" "Bob" f1.txt
Pour que seul le mot complet Bob
soit remplacé, on va utiliser l'option -w
.
rpl -w "Bob" "Alice" f1.txt
Replacing "Bob" with "Alice" (case sensitive) (partial words matched) . A Total of 2 matches replaced in 1 file searched.
</code>
Replacing "Bob" with "Alice" (case sensitive) (whole words only) . A Total of 1 matches replaced in 1 file searched.
Et pour vérifier
cat f1.txt
Alice tire la Bobinette
Remplaçont à présent Bob
par alice dans tous le dossier
rpl -w "Bob" "Alice" *
Replacing "Bob" with "Alice" (case sensitive) (whole words only) ... A Total of 2 matches replaced in 3 files searched.
cat f*
Alice tire la Bobinette Alice tire la Bobinette Alice tire la Bobinette
cat dossier/f*
Bob tire la Bobinette Bob tire la Bobinette Bob tire la Bobinette
On voit donc que seul les fichiers du dossier test
sont modifiés. Pour modifier l'ensemble des fichiers de tous les dossiers, on va utiliser l'option -R
Corrigeons donc ce B majuscule
rpl -R "Bobinette" "bobinette" *
N'hésitez pas à consulter la page de manuel pour voir toutes les options <code user>man rpl