Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
doc:editeurs:rpl [03/05/2017 14:11] bendia |
doc:editeurs:rpl [01/12/2021 10:39] (Version actuelle) ubub [Utilisation] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== rpl pour rechercher et remplacer en ligne de commande ====== | + | ====== rpl utilitaire de recherche/remplacement de texte ====== |
- | * Objet : Utilisation de rpl pour Rechercher et Remplacer en ligne de commande | + | * Objet : Utilisation de rpl pour Rechercher et Remplacer de façon récursive en ligne de commande |
* Niveau requis : {{tag>débutant}} | * Niveau requis : {{tag>débutant}} | ||
* Commentaires : //Parce que un éditeur de texte pour un fichier, c'est bien, mais en ligne de commande pour 20 fichiers, c'est mieux// | * Commentaires : //Parce que un éditeur de texte pour un fichier, c'est bien, mais en ligne de commande pour 20 fichiers, c'est mieux// | ||
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | * Suivi : {{tag>en-chantier à-tester à-placer}} | + | * Suivi : {{tag>à-compléter}} |
* Création par [[user>bendia]] 03/05/2017 | * Création par [[user>bendia]] 03/05/2017 | ||
* Testé par bendia le 3/05/2017 | * Testé par bendia le 3/05/2017 | ||
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=17752| Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=17752| Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
- | |||
- | **Nota :** | ||
- | |||
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
===== Introduction ===== | ===== Introduction ===== | ||
Ligne 18: | Ligne 14: | ||
//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. | //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 le faire récursivement (en inspectant les sous-dossiers), tenir compte de la casse, ne remplacer que le mot entier, choisir l'extension du fichier et bien d'autres options encore. | + | ''rpl'' permet de faire ça en une ligne de commande, avec pas mal d'options pour affiner un peu, comme : |
+ | * le faire récursivement (en inspectant les sous-dossiers), | ||
+ | * tenir compte de la casse, | ||
+ | * ne remplacer que le mot entier, | ||
+ | * choisir l'extension du fichier | ||
+ | * et bien d'autres options encore... | ||
===== Installation ===== | ===== Installation ===== | ||
Ligne 29: | Ligne 30: | ||
<code user>rpl [-LhiwbqvsRepfdt] [-xSUFFIX] ⟨vieille_chaine⟩ ⟨nouvelle_chaine⟩ ⟨fichier_cible ...⟩</code> | <code user>rpl [-LhiwbqvsRepfdt] [-xSUFFIX] ⟨vieille_chaine⟩ ⟨nouvelle_chaine⟩ ⟨fichier_cible ...⟩</code> | ||
- | Par exemple, si l'on veut remplacer ''Bob'' par ''Alice'' dans les 2 premières parties de mon tuto fictif, après s'être placer dans le dossier contenant les fichiers à traiter | + | 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 : |
<code user>rpl 'Bob' 'Alice' partie1.txt partie2.txt</code> | <code user>rpl 'Bob' 'Alice' partie1.txt partie2.txt</code> | ||
- | On peut bien sûr utiliser les caractères joker, pour traiter tous les fichiers du dossier par exemple | + | On peut bien sûr utiliser les caractères [[doc:programmation:shell:regexp|joker]], pour traiter tous les fichiers du dossier par exemple : |
<code user>rpl 'Bob' 'Alice' *</code> | <code user>rpl 'Bob' 'Alice' *</code> | ||
==== La récursivité avec l'option R ==== | ==== La récursivité avec l'option R ==== | ||
- | Si les fichiers à visiter ne se situe pas dans le même dossier, on peut indiquer que tous les fichiers sont à visiter | + | Si les fichiers à visiter ne se situe pas dans le même dossier, on peut indiquer que tous les fichiers sont à visiter : |
<code user>rpl -R 'Bob' 'Alice' *</code> | <code user>rpl -R 'Bob' 'Alice' *</code> | ||
==== La simulation ==== | ==== La simulation ==== | ||
- | Pour voir le résultat sans rien toucher, l'option ''-s'' ou ''--dry-run'' permet de voir les fichiers qui serait modifier si besoin | + | 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 |
==== La casse ==== | ==== La casse ==== | ||
- | Par défaut, la commande tient compte de la casse. Pour passer outre ce comportement, utiliser l'option ''-i'' | + | Par défaut, la commande tient compte de la casse. \\ |
+ | Pour passer outre ce comportement, utiliser l'option ''-i'' | ||
==== L'extension des fichiers ==== | ==== L'extension des fichiers ==== | ||
- | Pour spécifier une extension, on utilise l'option ''-x'', qui peut être spécifiée plusieurs fois. | + | 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 | ||
+ | <code user>rpl -R -x'txt' -x'html' 'Bob' 'Alice' *</code> | ||
==== Rechercher un mot entier ==== | ==== Rechercher un mot entier ==== | ||
- | 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 du genre qui fait mauvais genre dans votre devoir de Français ;-) | + | 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 ;-) |
<code>Tire la chevillette, et la Aliceinette cherra</code> | <code>Tire la chevillette, et la Aliceinette cherra</code> | ||
- | ===== Pour aller plus loin ===== | + | ===== Un TP pour bien comprendre ===== |
- | N'hésitez pas à consulter la page de manuel pour voir toutes les options <code user>man rpl>/code> | + | Nous allons essayer d'illustrer l'utilisation de rpl et quelques-une de ses options en s'exercant sur quelques fichiers d'exemple |
+ | |||
+ | ==== Mise en place ==== | ||
+ | |||
+ | 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 | ||
+ | |||
+ | <file bash TPrpl.sh> | ||
+ | #!/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/ | ||
+ | </file> | ||
+ | |||
+ | ==== TP ==== | ||
+ | |||
+ | <code user>rpl "Bob" "Alice" f1.txt</code> | ||
+ | <code>Replacing "Bob" with "Alice" (case sensitive) (partial words matched) | ||
+ | . | ||
+ | A Total of 2 matches replaced in 1 file searched. | ||
+ | </code> | ||
+ | <code user>cat f1.txt</code> | ||
+ | <code>Alice tire la Aliceinette</code> | ||
+ | <code user>cat f2.html</code> | ||
+ | <code>Bob tire la Bobinette</code> | ||
+ | <code user>cat dossier/f*</code> | ||
+ | <code>Bob tire la Bobinette | ||
+ | Bob tire la Bobinette | ||
+ | Bob tire la Bobinette</code> | ||
+ | |||
+ | 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 <code user>rpl "Alice" "Bob" f1.txt</code> | ||
+ | |||
+ | Pour que seul le mot complet ''Bob'' soit remplacé, on va utiliser l'option ''-w''. | ||
+ | <code user>rpl -w "Bob" "Alice" f1.txt</code> | ||
+ | <code>Replacing "Bob" with "Alice" (case sensitive) (partial words matched) | ||
+ | . | ||
+ | A Total of 2 matches replaced in 1 file searched. | ||
+ | </code> | ||
+ | |||
+ | </code><code>Replacing "Bob" with "Alice" (case sensitive) (whole words only) | ||
+ | . | ||
+ | A Total of 1 matches replaced in 1 file searched. | ||
+ | </code> | ||
+ | Et pour vérifier | ||
+ | <code user>cat f1.txt</code> | ||
+ | <code>Alice tire la Bobinette</code> | ||
+ | |||
+ | Remplaçont à présent ''Bob'' par alice dans tous le dossier <code user>rpl -w "Bob" "Alice" *</code><code>Replacing "Bob" with "Alice" (case sensitive) (whole words only) | ||
+ | ... | ||
+ | A Total of 2 matches replaced in 3 files searched. | ||
+ | </code> | ||
+ | <code user>cat f*</code><code>Alice tire la Bobinette | ||
+ | Alice tire la Bobinette | ||
+ | Alice tire la Bobinette | ||
+ | </code> | ||
+ | |||
+ | <code user>cat dossier/f*</code><code>Bob tire la Bobinette | ||
+ | Bob tire la Bobinette | ||
+ | Bob tire la Bobinette</code> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | <code user>rpl -R "Bobinette" "bobinette" *</code> | ||
+ | |||
+ | |||
+ | ===== Pour aller plus loin ===== | ||
+ | N'hésitez pas à consulter la page de manuel pour voir toutes les options | ||
+ | <code user>man rpl | ||