Înlocuiți textul din fișiere cu o singură comandă: perl

În anumite ocazii dorim să înlocuim textul dintr-un fișier, de exemplu, să modificăm Document.txt tot ce spune „familia mea” pentru „noi”. Pentru a realiza acest lucru, putem folosi editorul de text preferat (Kate, Gedit, SublimeText etc.), dar este întotdeauna bine să cunoaștem variante, alte modalități de a obține același rezultat 🙂

Se întâmplă asta cu expresii obisnuite puteți obține acest lucru, comanda sed este pur și simplu magnifică, are variante și opțiuni nesfârșite, dar ... pentru cei care doresc doar să înlocuiască textul din cel mai puțin complex mod posibil, pentru ei este că aduc această variantă mult mai simplă:

Urmând exemplul, avem fișierul Document.txt situat în $ HOME / Document.txt cu următorul text:

(...) familia mea Este ca toate, ca ale tale sau ale vecinului tău. De fapt familia mea Încercăm să fim oameni responsabili și în ochii societății, politici și sociali corecți. Cu toate acestea, în casa mea există o oaie neagră, și acesta este rolul meu LOL!. Am fost întotdeauna cel care nu se teme să spună ce crede (chiar dacă aparent nu este corect în ochii societății), deși în realitate familia mea este sătulă de murdărie societatea de astăzi.

Cu următoarea comandă veți schimba «familia mea" de "ne„:

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

Este atât de simplu 🙂

Deci, textul ar fi:

(...) ne Este ca toate, ca ale tale sau ale vecinului tău. De fapt ne Încercăm să fim oameni responsabili și în ochii societății, politici și sociali corecți. Cu toate acestea, în casa mea există o oaie neagră, și acesta este rolul meu LOL!. Am fost întotdeauna cel care nu se teme să spună ce crede (chiar dacă aparent nu este corect în ochii societății), deși în realitate familia mea este sătulă de murdărie societatea de astăzi.

Sintaxa este:

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

Comanda poate părea puțin complexă, să o descompunem puțin și să o explicăm puțin mai simplu 😉

  • perl : Ce vom folosi, perl
  • -pi : Pí, cum π (valoarea aproximativă de 3.14)
  • -e : E imaginează-l pentru «e să execute» ^ - ^
  • Apoi între ghilimele » deschidem cu o s și închidem cu o g: „sg” … Imaginați-vă S pentru Start și G pentru Game Over 😀
  • Întoarceți-vă între sg trebuie să punem două seturi de paranteze: [] y [], fiind așa: „S [] [] g”
  • În interiorul primelor paranteze, așa cum am spus mai sus, textul pe care dorim să-l eliminăm și să-l înlocuim cu unul nou va merge, în timp ce în al doilea set de paranteze noul text de pus va merge, urmând exemplul: „S [familia mea] [noi] g”

Simplu, nu-i așa?

Explicația este de fapt mult mai extinsă decât ceea ce este necesar pentru comandă, este destul de simplu de înțeles 🙂

Perl este mult, mult mai mult decât o simplă modalitate de a înlocui textul, este o limbă întreagă 😉

Dacă doriți să aflați mai multe despre aceasta, instalați pachetul perl-doc și aruncă o privire la cine îi permite, este doar un alt univers.

Apropo și pentru a închide, presupunând că doriți să găsiți toate fișierele .txt pe care le aveți în $ HOME / Documents / și în fiecare să înlocuiți „familia mea” cu „noi”, vă puteți alătura find + perl pentru a realiza acest lucru:

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

Sau folosind un wildcard:

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

Problema cu această a doua variantă este că nu se va înlocui în fișierele din subfoldere f

Oricum, sper că ți s-a părut interesant. Pentru mine a fost foarte util, pot înlocui deja textul direct de la terminal ... minunat! 😀


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   bum el a spus

    Ei bine, cred că mulți dintre noi de aici știm comanda sed, care are același scop, o face mult mai bună și este mai ușor de utilizat ...

    1.    KZKG ^ Gaara el a spus

      Multumesc pentru comentariul tau,
      Doar două detalii, de ce spuneți că sedul o face mai bună? Este într-adevăr mai ușor de utilizat cu atâtea personaje „ciudate”?

  2.   Federico A. Valdes Toujague el a spus

    Salutari tuturor!!!. Am folosit comanda sete, iar metoda descrisă aici cu perl este mai simplă. Mulțumesc KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara el a spus

      Mulțumesc pentru comentariu 🙂
      Ei bine, cel puțin mi se pare că este mai simplu decât expresiile obișnuite ... că, cu atâtea personaje „ciudate”, se poate face ceva cu adevărat complex de înțeles și învățat celor care nu sunt pricepuți.

      1.    giskard el a spus

        Există un adagiu „vechi” acolo: „Am avut o problemă, am decis să folosesc Expresii regulate ... acum am DOUĂ probleme” 😉

        1.    KZKG ^ Gaara el a spus

          HAHAHAHAHAHAHA !!!
          Expresiile regulate ne pot salva viețile la un moment dat ... da, este nevoie de mult timp să învățăm cum să le folosim și să nu murim încercând.

          Dacă aș fi cunoscut această comandă cu ani în urmă, DUMNEZEU !! cât de simplă ar fi fost viața mea 😀

          1.    giskard el a spus

            Clar! Bine manipulate, acestea sunt foarte puternice 🙂 Nimic mai bun pentru a manipula textul. Dar uneori, după cum spuneți în acest caz cu Perl, nu trebuie să mergeți atât de departe dacă este suficientă o înlocuire.
            Aș fi folosit oricum Python :)

    2.    dhunter el a spus

      Dar de sete o văd și mai simplu ... fac ceva greșit?

      sed -i "if / what-I-want-to-change / What's-new-to-put /" file-in-which-to-replace

      1.    KZKG ^ Gaara el a spus

        heh heh ... și dacă vreau să înlocuiesc „http://my.blog.com/content/” cu „http://my.blog.com/uploads/files/” 😀 ... deja acolo ai a pune \ cu spații și altele, și devine complex sau nu?

        1.    dhunter el a spus

          Nu este obligatoriu să utilizați / ca separator. Uită-te cu +

          sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» fișier

          1.    KZKG ^ Gaara el a spus

            O_O ... WTF!
            Mi-ai deschis acum un întreg univers de opțiuni .. O_O

          2.    giskard el a spus

            Îmi plac aceste postări în care toți învățăm ceva 🙂
            Nici eu nu știam asta.

  3.   RAW-de bază el a spus

    Prefer să folosesc direct vi ..

    La fel de simplu ca și:
    :% s / noi / familia mea / g

    % -> întreg document
    s -> căutare
    g -> toate aparițiile

    Salutări de ..

    1.    KZKG ^ Gaara el a spus

      Vă mulţumim!
      Nu am știut să o fac cu vi

  4.   st0rmt4il. el a spus

    Adăugat la favorite!

    Vă mulţumim!

  5.   n3furtună el a spus
  6.   DuranG el a spus

    Intrare excelentă! În cazul în care cineva este interesat, același lucru cu comanda Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Îndoieli el a spus

      Și ce se întâmplă dacă în fișier ceea ce vreau să înlocuiesc are ghilimele?
      Exemplu înlocuiește ceea ce spune text: »1 ″ cu text:» 2 ″
      cum ar fi comanda?

  7.   Percy salgado el a spus

    Alo

    Am vrut să înlocuiesc un șir care avea un @ în mijloc și să schimbe textul doar cu înainte de at.

    text de schimbat: Viva el Perú
    text nou: Viva mi patria @percysalgado
    Se arată: Trăiască patria mea

    Multumesc pentru ajutor

  8.   anonim el a spus

    „\” Trebuie să utilizați bară înainte de caractere cu dublă utilizare @, #, astfel încât să fie interpretate ca text.

  9.   gaba el a spus

    Și cum o fac în Windows ????