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 porodica" 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 🙂

Dešava 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 mnogo jednostavniju varijantu:

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

(...) moja porodica To je kao i svi oni, poput vašeg ili vašeg susjeda. Zapravo moja porodica 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čigledno nije tačno u očima društva), iako je u stvarnosti mojoj porodici dosta prljavština današnje društvo.

Sljedećom naredbom ćete promijeniti «moja porodica"od"nas":

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

To je tako jednostavno 🙂

Dakle, tekst bi bio:

(...) nas To je kao i svi oni, poput vašeg ili vašeg susjeda. Zapravo nas 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čigledno nije tačno u očima društva), iako je u stvarnosti mojoj porodici 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 može izgledati malo složeno, razložimo je malo i objasnimo malo jednostavnije 😉

  • Perl : Šta ć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 g: "sg" … Zamislite S za početak i G za Game Over 😀
  • Skrenite između sg moramo staviti dva seta 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 koji slijedi, slijedeći primjer: "S [moja porodica] [mi] g"

Jednostavno, zar ne?

Objašnjenje je zapravo mnogo opsežnije od onoga što je potrebno za naredbu, vrlo je jednostavno razumjeti 🙂

Perl je mnogo, mnogo 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 dozvoljava, to je samo drugi svemir.

Usput i da zatvorite, pod pretpostavkom da želite pronaći sve .txt datoteke koje imate u $ HOME / Documents / i u svakoj zamijeniti "moja porodica" sa "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 fold

U svakom slučaju, nadam se da vam je bilo zanimljivo. Za mene je to bilo jako korisno, već mogu zamijeniti tekst direktno s terminala ... sjajno! 😀


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Boom rekao je

    Pa, mislim da mnogi od nas ovdje znaju naredbu sed, koja služi istoj svrsi, čini je puno bolje i lakša je za upotrebu ...

    1.    KZKG ^ Gaara rekao je

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

  2.   Federico A. Valdes Toujague rekao je

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

    1.    KZKG ^ Gaara rekao je

      Hvala na komentaru 🙂
      Pa, barem mi se ovo čini jednostavnijim 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 rekao je

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

        1.    KZKG ^ Gaara rekao je

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

          Da sam znao ovu naredbu godinama, BOG !! kako bi moj život bio jednostavan 😀

          1.    giskard rekao je

            Jasno! Dobro obrađeni, vrlo su moćni 🙂 Ništa bolje za manipulisanje 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 rekao je

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

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

      1.    KZKG ^ Gaara rekao je

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

        1.    dhunter rekao je

          Nije obavezno koristiti / kao separator. Pogledajte sa +

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

          1.    KZKG ^ Gaara rekao je

            O_O… WTF!
            Sad ste mi otvorili čitav svemir opcija .. O_O

          2.    giskard rekao je

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

  3.   RAW-Basic rekao je

    Radije koristim direktno vi ..

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

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

    Pozdrav ..

    1.    KZKG ^ Gaara rekao je

      Hvala!
      Nisam znao kako se to radi sa vi

  4.   st0rmt4il rekao je

    Dodano u favorite!

    Hvala!

  5.   DuranG rekao je

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

    1.    Sumnjam rekao je

      A što 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 rekao je

    hola

    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.   Anónimo rekao je

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

  8.   Gaba rekao je

    I kako to mogu raditi u prozorima ????