Remplacez le texte à l'intérieur des fichiers par une seule commande: perl

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 ! 


Ajouter comme source préférée dans Google