Zamijenite tekst u datotekama samo jednom naredbom: perl

U određenim prilikama želimo zamijeniti tekst u datoteci, na primjer, promijeniti u Document.txt sve što kaže "moja obitelj" za "nas". Da bismo to postigli možemo koristiti naš omiljeni uređivač teksta (Kate, Gedit, SublimeText, itd.), ali uvijek je dobro znati varijante, druge načine za postizanje istog rezultata 

Dogodi se da sa regularni izrazi to možete postići, naredba sed je jednostavno veličanstvena, ima bezbroj varijanti i opcija, ali ... za one koji samo žele zamijeniti tekst iz najmanje složen mogući način, za njih donosim ovu puno jednostavniju varijantu:

Slijedeći primjer, imamo datoteku Document.txt smješten u $ HOME / Document.txt sa sljedećim tekstom:

(...) moja obitelj Kao i svi oni, poput vašeg ili vašeg susjeda. Zapravo moja obitelj Trudimo se biti odgovorni ljudi i u očima društva politički i socijalno korektni. Međutim, u mojoj kući je crna ovca, i to je moja uloga LOL! Oduvijek sam bila ta koja se ne boji reći ono što misli (čak i ako to očito nije točno u očima društva), iako je u stvarnosti mojoj obitelji dosta prljavština današnje društvo.

Sljedećom naredbom promijenit ćete «moja obitelj"od"mi„:

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

Tako je jednostavno 

Dakle, tekst bi bio:

(...) mi Kao i svi oni, poput vašeg ili vašeg susjeda. Zapravo mi Trudimo se biti odgovorni ljudi i u očima društva politički i socijalno korektni. Međutim, u mojoj kući je crna ovca, i to je moja uloga LOL! Oduvijek sam bila ta koja se ne boji reći ono što misli (čak i ako to očito nije točno u očima društva), iako je u stvarnosti mojoj obitelji dosta prljavština današnje društvo.

Sintaksa je:

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

Naredba se može činiti malo složenom, hajmo je malo raščlaniti i objasniti malo jednostavnije 

  • perl : Što ćemo koristiti, perl
  • -pi : Pí, kako π (približna vrijednost 3.14)
  • -e : E zamišljaju da «e izvrši» ^ - ^
  • Zatim pod navodnicima » otvaramo s s i zatvaramo s a g: "sg" …zamislite S za početak i G za kraj igre 
  • Skrenite između sg moramo staviti dva skupa zagrada: [] y [], biti takav: "S [] [] g"
  • Unutar prvih zagrada, kao što sam gore rekao, ići će tekst koji želimo ukloniti i zamijeniti novim, dok će u drugi set zagrada ići novi tekst, slijedeći primjer: "S [moja obitelj] [mi] g"

Jednostavno zar ne?

Objašnjenje je zapravo puno duže od onoga što je potrebno za naredbu, vrlo je jednostavno za razumjeti 

Perl je puno, puno više od načina zamjene teksta, to je cijeli jezik 

Ako želite saznati više o tome, instalirajte paket perl-dok i pogledajte whooodo što to dopušta, to je samo drugi svemir.

Usput i zatvoriti, pod pretpostavkom da želite pronaći sve .txt datoteke koje imate u $ HOME / Documents / i u svakoj zamijeniti "moja obitelj" s "mi", možete se pridružiti find + perl da biste to postigli:

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

Ili pomoću zamjenskog znaka:

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

Problem s ovom drugom varijantom je taj što neće zamijeniti datoteke koje se nalaze u podmapama 

U svakom slučaju, nadam se da vam je bilo zanimljivo. Za mene je bilo stvarno korisno, sada mogu zamijeniti tekst izravno s terminala... super! 


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

      uspon dijo

    Pa, mislim da mnogi od nas ovdje znaju naredbu sed, koja ima istu svrhu, čini to puno bolje i jednostavnija je za upotrebu ...

         KZKG ^ Gaara dijo

      Hvala na komentaru,
      Samo dva detalja, zašto kažete da ga sed čini boljim? Je li doista lakše koristiti s toliko 'čudnih' likova?

      Federico A. Valdes Toujague dijo

    Pozdrav svima!!!. Koristio sam naredbu žeđ, a ovdje opisana metoda s perlom je jednostavnija. Hvala KZKG ^ Gaara !!!.

         KZKG ^ Gaara dijo

      Hvala na komentaru 🙂
      Pa, barem mi se čini da je ovo jednostavnije od regularnih izraza ... da se s toliko 'čudnih' likova može učiniti nešto stvarno složeno za razumijevanje i učenje nesavjesnima.

           giskard dijo

        Postoji "stara" poslovica: "Imao sam problem, odlučio sam koristiti Regularne izraze ... sada imam DVA problema"

             KZKG ^ Gaara dijo

          HAHAHAHAHAHAHA !!!
          Regularni izrazi mogu nam spasiti život u određenom trenutku ... da, treba puno vremena da naučimo kako ih koristiti i ne umiremo pokušavajući.

          Da sam znao ovu zapovijed prije godina, BOG !! kako bi moj život bio jednostavan 😀

               giskard dijo

            Čisto! Dobro obrađeni, vrlo su moćni 🙂 Ništa bolje za manipuliranje tekstom. Ali ponekad, kao što kažete u ovom slučaju s Perlom, ne morate ići tako daleko ako je zamjena dovoljna.
            Ionako bih koristio Python :)

         dhunter dijo

      Ali u žeđi to vidim još jednostavnije ... radim li nešto krivo?

      sed -i "ako / što-želim-promijeniti / novo-staviti /" datoteku-u-koju-zamijeniti

           KZKG ^ Gaara dijo

        heh heh ... i ako želim zamijeniti "http://my.blog.com/content/" sa "http://my.blog.com/uploads/files/" 😀 ... već ste tu staviti \ s razmacima i drugima, a postaje složeno ili ne?

             dhunter dijo

          Nije obvezno koristiti / kao separator. Pogledajte sa +

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

               KZKG ^ Gaara dijo

            O_O ... WTF!
            Sad ste mi otvorili čitav svemir mogućnosti .. O_O

               giskard dijo

            Volim ove postove u kojima svi nešto naučimo 🙂
            Ni to nisam znao.

      RAW-Basic dijo

    Radije koristim izravno vi ..

    Jednostavno kao:
    :% s / nas / moja obitelj / g

    % -> cijeli dokument
    s -> pretraga
    g -> sve pojave

    Pozdrav ..

         KZKG ^ Gaara dijo

      Gracias!
      Nisam znao kako se to radi sa vi

      st0rmt4il dijo

    Dodano u favorite!

    Gracias!

      DuranG dijo

    Odličan ulaz! U slučaju da nekoga zanima, isto je i s naredbom Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

         Sumnjajući dijo

      A što se događa ako unutar datoteke ono što želim zamijeniti sadrži navodnike?
      Primjer zamijenite ono što kaže tekst: »1 ″ tekstom:» 2 ″
      kakva bi bila naredba?

      Percy salgado dijo

    Bok

    Htio sam zamijeniti niz koji je imao @ u sredini i samo je promijenio tekst prije at.

    tekst za promjenu: Živio Peru
    novi tekst: Viva mi patria @percysalgado
    Prikazano: Živjela moja domovina

    Hvala na pomoći

      anoniman dijo

    "\" Morate koristiti kosu crtu prije znakova s ​​dvostrukom upotrebom @, #, tako da se protumače kao tekst.

      gaba dijo

    I kako to mogu učiniti u prozorima ????