À certaines occasions, nous voulons remplacer du texte dans un fichier, par exemple, changer Document.txt tout ce que «ma famille» dit pour «nous». Pour y parvenir, nous pouvons utiliser notre éditeur de texte préféré (Kate, Gedit, SublimeText, etc.) mais il est toujours bon de connaître les variantes, d'autres moyens d'atteindre le même résultat
Il arrive qu'avec expressions régulières vous pouvez y parvenir, la commande sed est tout simplement magnifique, elle a des variantes et des options infinies mais ... pour ceux qui veulent juste remplacer le texte du manière la moins complexe possible, pour eux c'est que j'apporte cette variante beaucoup plus simple:
En suivant l'exemple, nous avons le fichier Document.txt situé au $ HOME / Document.txt avec le texte suivant:
(...) ma famille C'est comme tous, comme le vôtre ou celui de votre voisin. En réalité ma famille Nous essayons d'être des personnes responsables et aux yeux de la société, politiquement et socialement correctes. Cependant, dans ma maison, il y a un mouton noir, et c'est mon rôle LOL!. J'ai toujours été celui qui n'a pas peur de dire ce qu'il pense (même si ce n'est apparemment pas correct aux yeux de la société), même si en réalité ma famille en a assez de la
la saletéla société d'aujourd'hui.
Avec la commande suivante, vous changerez «ma famille" pour "nous":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
C'est aussi simple que ça 🙂
Le texte serait donc:
(...) nous C'est comme tous, comme le vôtre ou celui de votre voisin. En réalité nous Nous essayons d'être des personnes responsables et aux yeux de la société, politiquement et socialement correctes. Cependant, dans ma maison, il y a un mouton noir, et c'est mon rôle LOL!. J'ai toujours été celui qui n'a pas peur de dire ce qu'il pense (même si ce n'est apparemment pas correct aux yeux de la société), même si en réalité ma famille en a assez de la
la saletéla société d'aujourd'hui.
La syntaxe est:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
La commande peut sembler 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 en fait beaucoup plus étendue que ce qui est nécessaire pour la commande, c'est assez simple à comprendre 🙂
Perl est bien plus qu'un simple moyen de remplacer du texte, c'est tout un langage 😉
Si vous souhaitez en savoir plus, installez le package perl-doc et jetez un oeil à whooodo ce qu'il permet, c'est juste 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 dans les fichiers qui sont 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éjà remplacer du texte directement depuis le terminal ... super! 😀
Eh bien, je pense que beaucoup d'entre nous ici connaissent la commande sed, qui sert le même but, la rend bien meilleure et est plus facile à utiliser ...
Merci pour ton commentaire,
Juste deux détails, pourquoi dites-vous que sed le rend meilleur? Est-ce vraiment plus facile à utiliser avec autant de personnages «bizarres»?
Salut à tous!!!. J'ai utilisé la commande sed, et la méthode décrite ici avec perl est plus simple. Merci KZKG ^ Gaara !!!.
Merci pour le commentaire 🙂
Eh bien, au moins, il me semble que c'est plus simple que les expressions régulières ... qu'avec autant de caractères «bizarres», quelque chose de vraiment complexe à comprendre et à apprendre peut être fait aux non-avertis.
Il y a un «vieil» adage là-bas: «J'ai eu un problème, j'ai décidé d'utiliser des expressions régulières ... maintenant j'ai DEUX problèmes» 😉
HAHAHAHAHAHAHA !!!
Les expressions régulières peuvent sauver nos vies à un moment donné ... oui, il faut beaucoup de temps pour apprendre à les utiliser et ne pas mourir en essayant.
Si j'avais connu cette commande il y a des années, DIEU !! comme ma vie aurait été simple 😀
Clair! Bien manipulés ils sont très puissants 🙂 Rien de mieux pour manipuler du texte. Mais parfois, comme vous le dites dans ce cas avec Perl, vous n'avez pas besoin d'aller aussi loin si un remplacement suffit.
J'aurais quand même utilisé Python :)
Mais dans la soif, je le vois encore plus simple ... est-ce que je fais quelque chose de mal?
sed -i "oui / ce-que-je-veux-changer / nouveau-à-mettre /" fichier-dans-lequel-remplacer
heh heh ... et si je veux remplacer "http://my.blog.com/content/" par "http://my.blog.com/uploads/files/" 😀 ... déjà là vous avez mettre \ avec des espaces et d'autres, et cela devient complexe ou pas?
Il n'est pas obligatoire d'utiliser / comme séparateur. Regardez avec +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» fichier
O_O… WTF!
Vous avez ouvert tout un univers d'options pour moi maintenant .. O_O
J'adore ces articles où nous apprenons tous quelque chose 🙂
Je ne le savais pas non plus.
Je préfère utiliser directement vi ..
Aussi simple que:
:% s / nous / ma famille / g
% -> document entier
s -> recherche
g -> toutes les occurrences
Salutations ..
Merci!
Je ne savais pas comment faire avec vi
Ajouté aux favoris!
Merci!
Jetez-y un œil si vous avez un peu de la commande rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Bonne entrée! Au cas où quelqu'un serait intéressé, la même chose avec la commande Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
Et que se passe-t-il si dans le fichier ce que je veux remplacer contient des guillemets?
Exemple: remplacer ce qui dit texte: »1 ″ par du texte:» 2 ″
comment serait la commande?
Salut
Je voulais remplacer une chaîne qui avait un @ au milieu et changer le texte avant le at.
texte à modifier: vive le Pérou
nouveau texte: Viva mi patria @percysalgado
Montré: vive ma patrie
Merci pour ton aide
"\" Vous devez utiliser la barre oblique avant les caractères à double usage @, #, afin qu'ils soient interprétés comme du texte.
Et comment puis-je le faire dans Windows ????