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

À 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! 😀


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Boom dit

    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 ...

    1.    KZKG ^ Gaara dit

      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»?

  2.   Federico A. Valdès Toujague dit

    Salut à tous!!!. J'ai utilisé la commande sed, et la méthode décrite ici avec perl est plus simple. Merci KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara dit

      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.

      1.    giskard dit

        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» 😉

        1.    KZKG ^ Gaara dit

          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 😀

          1.    giskard dit

            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 :)

    2.    chasseur dit

      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

      1.    KZKG ^ Gaara dit

        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?

        1.    chasseur dit

          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

          1.    KZKG ^ Gaara dit

            O_O… WTF!
            Vous avez ouvert tout un univers d'options pour moi maintenant .. O_O

          2.    giskard dit

            J'adore ces articles où nous apprenons tous quelque chose 🙂
            Je ne le savais pas non plus.

  3.   RAW-Basique dit

    Je préfère utiliser directement vi ..

    Aussi simple que:
    :% s / nous / ma famille / g

    % -> document entier
    s -> recherche
    g -> toutes les occurrences

    Salutations ..

    1.    KZKG ^ Gaara dit

      Merci!
      Je ne savais pas comment faire avec vi

  4.   st0rmt4il dit

    Ajouté aux favoris!

    Merci!

  5.   n3tempête dit
  6.   DuranG dit

    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

    1.    Douter dit

      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?

  7.   Percy salgado dit

    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

  8.   anonyme dit

    "\" Vous devez utiliser la barre oblique avant les caractères à double usage @, #, afin qu'ils soient interprétés comme du texte.

  9.   Gaba dit

    Et comment puis-je le faire dans Windows ????