Zëvendësoni tekstin brenda skedarëve me vetëm një komandë: perl

Në raste të caktuara ne duam të zëvendësojmë tekstin brenda një skedari, për shembull, ndryshimin në Dokumenti.txt gjithçka që thotë "familja ime" për "ne". Për ta arritur këtë ne mund të përdorim redaktuesin tonë të preferuar të tekstit (Kate, Gedit, SublimeText, etj.) Por është gjithmonë mirë të njohim variante, mënyra të tjera për të arritur të njëjtin rezultat

Ndodh që me shprehje të rregullta mund ta arrini këtë, komanda sed është thjesht madhështore, ka variante dhe mundësi të pafund por ... për ata që thjesht duan të zëvendësojnë tekstin nga mënyra më pak komplekse e mundshme, për ta është se unë sjell këtë variant shumë më të thjeshtë:

Duke ndjekur shembullin, kemi skedarin Dokumenti.txt e vendosur në $ HOME / Document.txt me tekstin e mëposhtëm:

(...) familja ime Likeshtë si të gjitha, si e jotja apo e fqinjit tuaj. Në fakt familja ime Ne përpiqemi të jemi njerëz të përgjegjshëm dhe në sytë e shoqërisë, politikisht dhe shoqërisht korrekt. Sidoqoftë, në shtëpinë time është një dele e zezë, dhe ky është roli im LOL! Unë gjithmonë kam qenë ai që nuk ka frikë të thotë atë që mendon (edhe pse në dukje nuk është e saktë në sytë e shoqërisë), edhe pse në të vërtetë familja ime është ngopur me i poshtër shoqëria e sotme.

Me komandën e mëposhtme do të ndryshoni «familja ime"nga"na':

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

Thatshtë kaq e thjeshtë

Kështu që teksti do të ishte:

(...) na Likeshtë si të gjitha, si e jotja apo e fqinjit tuaj. Në fakt na Ne përpiqemi të jemi njerëz të përgjegjshëm dhe në sytë e shoqërisë, politikisht dhe shoqërisht korrekt. Sidoqoftë, në shtëpinë time është një dele e zezë, dhe ky është roli im LOL! Unë gjithmonë kam qenë ai që nuk ka frikë të thotë atë që mendon (edhe pse në dukje nuk është e saktë në sytë e shoqërisë), edhe pse në të vërtetë familja ime është ngopur me i poshtër shoqëria e sotme.

Sintaksa është:

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

Komanda mund të duket paksa komplekse, le ta zbërthejmë pak dhe ta shpjegojmë pak më thjesht

  • perl : Çfarë do të përdorim, perl
  • -pi : Pí, si π (vlera e përafërt e 3.14)
  • -e : E imagjinoni që «të ekzekutohet» ^ - ^
  • Pastaj në thonjëza » ne hapemi me një s dhe ne mbyllim me një g: "sg" … Imagjinoni S për Fillimin dhe G për Lojën Mbi
  • Kthehuni midis sg ne duhet të vendosim dy grupe të kllapave: [] y [], duke qenë kështu: "S [] [] g"
  • Brenda kllapave të para siç thashë më lart, teksti që duam të heqim dhe zëvendësojmë me një të ri do të shkojë, ndërsa në grupin e dytë të kllapave do të shkojë teksti i ri për të vendosur, duke ndjekur shembullin: "S [familja ime] [ne] g"

E thjeshtë apo jo?

Shpjegimi është në të vërtetë shumë më i gjerë se sa është i nevojshëm për komandën, është mjaft e thjeshtë për tu kuptuar

Perl është shumë, shumë më tepër sesa një mënyrë për të zëvendësuar tekstin, është një gjuhë e tërë

Nëse dëshironi të mësoni më shumë për këtë, instaloni paketën perl-dok dhe hidhni një vështrim në whooodo çfarë lejon, është thjesht një univers tjetër

Nga rruga dhe për të mbyllur, duke supozuar se dëshironi të gjeni të gjitha skedarët .txt që keni në $ HOME / Documents / dhe në secilin prej tyre të zëvendësoni "familjen time" me "ne", ju mund të bashkoheni në find + perl për ta arritur këtë:

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

Ose duke përdorur një kartë të egër:

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

Problemi me këtë variant të dytë, është se nuk do të zëvendësohet në skedarët që ndodhen në nënfolder

Gjithsesi, shpresoj se e keni parë interesante. Për mua ka qenë vërtet e dobishme, unë tashmë mund ta zëvendësoj tekstin direkt nga terminali ... shkëlqyeshëm! 😀


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   bum dijo

    Epo, mendoj se shumë prej nesh këtu e dinë komandën sed, e cila shërben për të njëjtin qëllim, e bën atë shumë më mirë dhe është më e lehtë për t'u përdorur ...

    1.    KZKG ^ Gaara dijo

      Faleminderit per komentin tuaj
      Vetëm dy detaje, pse thoni që sed e bën më mirë? A është vërtet më e lehtë të përdoret me kaq shumë personazhe 'të çuditshëm'?

  2.   Federico A. Valdes Toujague dijo

    Përshëndetje për të gjithë !!!. Unë kam përdorur komandën etje, dhe metoda e përshkruar këtu me perl është më e thjeshtë. Faleminderit KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara dijo

      Faleminderit për komentin
      Epo, të paktën më duket se kjo është më e thjeshtë se shprehjet e rregullta ... që me kaq shumë karaktere 'të çuditshëm', diçka me të vërtetë komplekse për t’u kuptuar dhe mësuar mund t’i bëhet jo-mendjes.

      1.    giskard dijo

        Ekziston një fjalë e urtë «e vjetër» atje: «Unë kisha një problem, vendosa të përdor shprehje të rregullta ... tani kam dy probleme»

        1.    KZKG ^ Gaara dijo

          HAHAHAHAHAHAHA !!!
          Shprehjet e rregullta mund të na shpëtojnë jetën në një pikë të caktuar ... po, duhet një kohë e gjatë për të mësuar se si t'i përdorësh ato dhe të mos vdesësh duke u përpjekur.

          Sikur ta kisha ditur këtë urdhër vite më parë, ZOT !! sa e thjeshtë do të kishte qenë jeta

          1.    giskard dijo

            Qartë! Trajtuar mirë ato janë shumë të fuqishme 🙂 Asgjë më e mirë për të manipuluar tekstin. Por ndonjëherë, siç thoni në këtë rast me Perl, nuk keni pse të shkoni aq larg nëse mjafton një zëvendësim.
            Sidoqoftë do të kisha përdorur Python :)

    2.    dhunues dijo

      Por nga etja e shoh edhe më të thjeshtë ... po bëj diçka keq?

      sed -i "nëse / çfarë-dua-të-ndryshoj / ri-për-të vendosur /" skedarin-në-cilin-për-zëvendësuar

      1.    KZKG ^ Gaara dijo

        heh heh ... dhe nëse dua të zëvendësoj "http://my.blog.com/content/" nga "http://my.blog.com/uploads/files/" 😀 ... tashmë atje ke për të vënë \ me hapësira dhe të tjerët, dhe bëhet komplekse apo jo?

        1.    dhunues dijo

          Nuk është e detyrueshme të përdoret / si ndarës. Shikoni me +

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

          1.    KZKG ^ Gaara dijo

            O_O… WTF!
            Tani më keni hapur një univers të tërë opsionesh .. O_O

          2.    giskard dijo

            I dua këto postime ku të gjithë mësojmë diçka
            As këtë nuk e dija.

  3.   RAW-Bazë dijo

    Unë preferoj të përdor direkt vi ..

    Aq e thjeshtë sa:
    :% s / ne / familja ime / g

    % -> i tërë dokumenti
    s -> kërko
    g -> të gjitha dukuritë

    Përshëndetje ..

    1.    KZKG ^ Gaara dijo

      Ju faleminderit!
      Nuk dija si ta bëja me vi

  4.   st0rmt4il dijo

    Shtuar në të preferuarat!

    Ju faleminderit!

  5.   DuranG dijo

    Hyrje e shkëlqyeshme! Në rast se dikush është i interesuar, e njëjta gjë me komandën Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Dyshimi dijo

      Dhe çfarë ndodh nëse brenda skedarit ajo që dua të zëvendësoj ka citate?
      Shembulli zëvendësoni atë që thotë tekst: »1 ″ me tekst:» 2
      si do te ishte komanda?

  6.   Percy salgado dijo

    Përshëndetje

    Doja të zëvendësoja një varg që kishte një @ në mes dhe të ndryshoja vetëm tekstin në shenjën para në.

    teksti për të ndryshuar: Rroftë Peruja
    teksti i ri: Viva mi patria @percysalgado
    Tregohen: Rroftë atdheu im

    Faleminderit për ndihmën tuaj

  7.   anonim dijo

    "\" Duhet të përdorni prerjen para karaktereve me përdorim të dyfishtë @, #, në mënyrë që ato të interpretohen si tekst.

  8.   GABA dijo

    Dhe si ta bëj në dritare ????