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 "moja obitelj" govori za "nas". Da bismo to postigli možemo koristiti naš preferirani uređivač teksta (Kate, Gedit, SublimeText itd.), Ali uvijek je dobro znati varijante i 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

To je tako 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 pomalo složenom, razložimo je malo i objasnimo 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 Start i G za Game Over 😀
  • 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 opsežnije od onoga što je potrebno za naredbu, vrlo je jednostavno razumjeti 🙂

Perl je mnogo, puno više od samo načina da zamijeni tekst, 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 se neće zamijeniti u datotekama koje se nalaze u podmapama

Svejedno, nadam se da vam je bilo zanimljivo. Za mene je to bilo jako korisno, već mogu zamijeniti tekst izravno s terminala ... sjajno! 😀


21 komentara, ostavi svoj

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.

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

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

  2.   Federico A. Valdes Toujague dijo

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

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

      1.    giskard dijo

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

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

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

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

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

        1.    dhunter dijo

          Nije obvezno koristiti / kao separator. Pogledajte sa +

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

          1.    KZKG ^ Gaara dijo

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

          2.    giskard dijo

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

  3.   RAW-Basic dijo

    Radije koristim izravno vi ..

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

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

    Pozdrav ..

    1.    KZKG ^ Gaara dijo

      Gracias!
      Nisam znao kako se to radi sa vi

  4.   st0rmt4il dijo

    Dodano u favorite!

    Gracias!

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

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

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

  7.   anoniman dijo

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

  8.   gaba dijo

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