Substitueix text dins d'arxius amb només una ordre: perl

En determinades ocasions desitgem reemplaçar text dins d'un arxiu, per exemple, canviar a document.txt tot el que digui «la meva família» per «nosaltres». Per aconseguir això podem utilitzar el nostre editor de text preferit (Kate, Gedit, SublimeText, etc.) però sempre és bo conèixer variants, altres formes d'aconseguir el mateix resultat 🙂

Passa que amb expressions regulars es pot aconseguir això, la comanda set és simplement magnífic, té una infinitat de variants i opcions però ... per a aquells que només volen reemplaçar text de la forma menys complexa possible, Per a ells és que porto aquesta variant molt més simple:

Seguint l'exemple, tenim l'arxiu document.txt ubicat a $ HOME / document.txt amb el següent text:

(...) la meva família és com totes, com la teva o la del teu veí. de fet la meva família intentem ser persones responsables i als ulls de la societat, políticament i socialment correctes. No obstant això, a casa meva hi ha una ovella negra, i aquest és el meu paper LOL !. Jo sempre he estat el que no té por de dir el que pensa (encara que no sigui aparentment correcte a ulls de la societat), encara que en realitat la meva família està farta de la brutícia societat d'avui dia.

Amb la següent comanda canviarà «la meva família»Per«nosaltres":

perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt

Així de simple 🙂

Llavors el text seria:

(...) nosaltres és com totes, com la teva o la del teu veí. de fet nosaltres intentem ser persones responsables i als ulls de la societat, políticament i socialment correctes. No obstant això, a casa meva hi ha una ovella negra, i aquest és el meu paper LOL !. Jo sempre he estat el que no té por de dir el que pensa (encara que no sigui aparentment correcte a ulls de la societat), encara que en realitat la meva família està farta de la brutícia societat d'avui dia.

La sintaxi és:

perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar

Pot semblar una mica complex la comanda, anem a desglossar una mica i explicar-ho de forma una mica més simple 😉

  • perl : El que farem servir, perl
  • -Pi : Pi, com π (El de valor aproximat de 3.14)
  • -e : La I imagínenla de «i d'executar» ^ - ^
  • Després entre cometes » obrim amb una s i tanquem amb una g: «sg» ... imaginin la S de Start (iniciar) i la G de Game Over 😀
  • Al seu torn entre la sg hem de posar dos jocs de claudàtors: [] y [], Quedant així: «S [] [] g»
  • Dins dels primers claudàtors com vaig dir més amunt, anirà el text que desitgem treure i reemplaçar per un de nou, mentre que en el segon joc de claudàtors anirà el nou text a posar, seguint l'exemple: «S [la meva família] [nosaltres] g»

Simplement no?

L'explicació és en realitat molt més extensa que el necessari per a la comanda, és bastant senzill d'entendre 🙂

Perl és molt, moltíssim més que una forma per reemplaçar text, és tot un llenguatge 😉

Si desitgen aprendre més d'ell instal·lin el paquet perl-doc i tirin-li un ull a toooot el que permet, simplement és un univers diferent.

Per cert i per tancar, suposant que vulguin buscar tots els fitxers .txt que tinguin en $ HOME / Documents / i en cada un reemplaçar «la meva família» per «nosaltres», es pot unir find + perl per aconseguir això:

find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;

O bé usant un comodí:

perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt

El problema amb aquesta segona variant, és que no reemplaçarà en arxius que es troben en subcarpetes 🙂

En fi, espero que l'hagin trobat interessant. Per a mi ha estat realment útil, ja puc reemplaçar text directament des de la terminal ... genial! 😀


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   auge va dir

    Doncs crec que aquí molts coneixem la comanda set, que serveix per el mateix, ho fa molt millor i és més senzill d'utilitzar ...

    1.    KZKG ^ Gaara va dir

      Gràcies pel teu comentari,
      Només dos detalls, per què dius que set ho fa millor? ¿De debò és més senzill d'utilitzar amb tants caràcters 'estranys'?

  2.   Federico A. Valdés Toujague va dir

    Salutacions a tots !!!. He utilitzat la comanda set, I el mètode descrit aquí amb perl és més senzill. Gràcies KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara va dir

      Gràcies pel comantario 🙂
      Bé, al menys a mi em sembla això més simple que expressions regulars ... que amb tants caràcters 'estranys', als no coneixedors se'ls pot fer alguna cosa realment complex d'entendre i aprendre.

      1.    Giskard va dir

        Diu un «vell» adagi per aquí: «Jo tenia un problema, vaig decidir utilitzar Expressions Regulars ... ara tinc DOS problemes» 😉

        1.    KZKG ^ Gaara va dir

          HAHAHAHAHAHAHA !!!
          Les expressions regulars poden salvar-nos la vida en un moment determinat ... això sí, es necessita mooolt temps per aprendre a usar-les i no morir en l'intent.

          Si jo hagués conegut aquesta comanda anys enrere, DÉU !! què simple hauria estat la meva vida 😀

          1.    Giskard va dir

            És clar! Bé manejades són poderosíssimes 🙂 Per manipular text res millor. Però de vegades, com dius en aquest cas amb Perl, no cal anar tan lluny si un replace prou.
            Jo hauria fet servir Python en tot cas 😉

    2.    caçador va dir

      Però en set jo ho veig fins més simple ... estic fent alguna cosa malament?

      set -i «s / el-que-vull-canviar / el-nou-a-posar /» arxiu-en-el-qual-reemplaçar

      1.    KZKG ^ Gaara va dir

        je je ... i si vull reemplaçar «http://my.blog.com/content/» per «http://my.blog.com/uploads/files/» 😀 ... ja aquí cal posar \ amb espais i altres , i es fa complex o no?

        1.    caçador va dir

          No és obligatori fer servir / com a separador. Mira amb +

          set -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» fitxer

          1.    KZKG ^ Gaara va dir

            O_O ... WTF!
            Has obert tot un univers d'opcions per a mi ara .. O_O

          2.    Giskard va dir

            M'encanten aquests posts on tots aprenem alguna cosa 🙂
            Aquesta no me la sabia tampoc.

  3.   RAW-Basic va dir

    Prefereixo usar directament vaig veure ..

    Tan simple com:
    :% S / nosaltres / meva família / g

    % -> tot el document
    s -> buscar
    g -> totes les ocurrències

    Salutacions ..

    1.    KZKG ^ Gaara va dir

      Gràcies!
      Amb vaig veure no sabia fer-ho

  4.   st0rmt4il va dir

    Afegit a favorits!

    Gràcies!

  5.   n3storm va dir
  6.   Durang va dir

    Gran entrada !, per si a algú li interessa, el mateix amb la comanda set de Linux: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    dubtant va dir

      I que passa si d'aquí a l'arxiu el que vull reemplaçar té cometes?
      Exemple reemplaçar el que diu text: »1" per text: »2"
      com seria la comanda?

  7.   Percy Salgado va dir

    Hola

    Vaig voler reemplaçar una cadena que tenia una @ al mig i només canviava el text pel abans de l'arrova.

    text a canviar: Visca el Perú
    nou text: Visca la meva pàtria @percysalgado
    Es mostra: Visca la meva pàtria

    Gràcies per la teva ajuda

  8.   anònim va dir

    «\» Cal utilitzar la barra davant dels caràcters amb doble ús @, #, perquè així siguin interpretats com a text.

  9.   Gaba va dir

    I com ho faig en windows ????