Il arrive que l'on souhaite remplacer du texte dans un fichier, par exemple, changer toutes les occurrences de « ma famille » par « nous » dans Document.txt . Pour ce faire, on peut utiliser son éditeur de texte préféré (Kate, Gedit, Sublime Text, etc.), mais il est toujours utile de connaître d'autres méthodes pour parvenir au même résultat.
Il s'avère que cela est possible grâce aux expressions régulières ; la commande `sed` est tout simplement magnifique, elle offre une infinité de variations et d'options, mais… pour ceux qui souhaitent simplement remplacer du texte de la manière la plus simple possible , voici une variante beaucoup plus simple :
En reprenant cet exemple, nous avons le fichier Document.txt situé dans $HOME/Document.txt contenant le texte suivant :
Ma famille est comme toutes les autres, comme la vôtre ou celle de vos voisins. En fait, nous essayons tous d'être responsables aux yeux de la société, politiquement et socialement corrects. Cependant, il y a une brebis galeuse dans la famille, et c'est mon rôle, haha ! J'ai toujours été celle qui n'a pas peur de dire ce que je pense (même si ce n'est pas toujours bien vu), même si, en réalité, ma famille en a assez de la
sociétéactuelle.
La commande suivante remplacera « ma famille » par « nous » :
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
C'est aussi simple que ça
Le texte serait donc:
(…) Nous sommes comme tout le monde, comme vous ou votre voisin. En fait, nous essayons d'être responsables aux yeux de la société, politiquement et socialement corrects. Cependant, il y a une brebis galeuse dans la famille, et c'est mon rôle, MDR ! J'ai toujours été celle qui n'a pas peur de dire ce que je pense (même si cela paraît incorrect aux yeux de la société), même si, en réalité, ma famille en a assez de la
médiocritéde la société actuelle.
La syntaxe est:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
La commande peut paraître un peu complexe, décomposons-la un peu et expliquons-la un peu plus simplement
- perl : Ce que nous allons utiliser, perl
- -pi : Pí, comment π (la valeur approximative de 3.14)
- -e : Le E l'imagine pour «e exécuter» ^ - ^
- Puis entre guillemets » nous ouvrons avec un s et nous fermons avec un g: "sg" …imaginez le S pour Start et le G pour Game Over
- Tournez entre le sg il faut mettre deux jeux de parenthèses: [] y [], étant de cette façon: "S [] [] g"
- À l'intérieur des premiers crochets, comme je l'ai dit ci-dessus, le texte que nous voulons supprimer et remplacer par un nouveau ira, tandis que dans le deuxième ensemble de crochets, le nouveau texte à mettre ira, en suivant l'exemple: "S [ma famille] [nous] g"
Simple n'est-ce pas?
L'explication est effectivement bien plus longue que ce qui est nécessaire à la commande, c'est assez simple à comprendre
Perl est bien plus qu'un moyen de remplacer du texte, c'est un langage à part entière
Si vous souhaitez en savoir plus, installez le paquet perl-doc et découvrez tout ce qu'il permet ; c'est tout simplement un univers différent.
En passant et pour fermer, en supposant que vous vouliez trouver tous les fichiers .txt que vous avez dans $ HOME / Documents / et que dans chacun d'eux remplacez "ma famille" par "nous", vous pouvez rejoindre find + perl pour y parvenir:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Ou en utilisant un caractère générique:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Le problème avec cette deuxième variante est qu'elle ne remplacera pas les fichiers qui se trouvent dans les sous-dossiers
Quoi qu’il en soit, j’espère que vous l’avez trouvé intéressant. Pour moi, cela a été vraiment utile, je peux désormais remplacer du texte directement depuis le terminal... super !