Udskift tekst i filer med kun en kommando: perl

Ved visse lejligheder vil vi erstatte tekst i en fil, for eksempel ændring i Document.txt alt, hvad "min familie" siger for "os." For at opnå dette kan vi bruge vores foretrukne teksteditor (Kate, Gedit, SublimeText osv.), Men det er altid godt at kende varianter, andre måder at opnå det samme resultat 🙂

Det sker, at med regelmæssige udtryk du kan opnå dette, sed-kommandoen er simpelthen storslået, den har uendelige varianter og muligheder, men ... for dem der bare vil erstatte tekst fra mindst mulig kompleks måde, for dem er det, at jeg bringer denne meget enklere variant:

Efter eksemplet har vi filen Document.txt placeret i $ HJEM / Document.txt med følgende tekst:

(...) min familie Det er som dem alle, som din eller din nabo. Faktisk min familie Vi forsøger at være ansvarlige mennesker og i samfundets øjne politisk og socialt korrekte. Imidlertid er der et sort får i mit hus, og det er min rolle LOL!. Jeg har altid været den, der ikke er bange for at sige, hvad han synes (selvom det tilsyneladende ikke er korrekt i samfundets øjne), selvom min familie i virkeligheden er træt af smuds nutidens samfund.

Med følgende kommando vil du ændre «min familie" ved "vi":

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

Det er så simpelt 🙂

Så teksten ville være:

(...) vi Det er som dem alle, som din eller din nabo. Faktisk vi Vi forsøger at være ansvarlige mennesker og i samfundets øjne politisk og socialt korrekte. Imidlertid er der et sort får i mit hus, og det er min rolle LOL!. Jeg har altid været den, der ikke er bange for at sige, hvad han synes (selvom det tilsyneladende ikke er korrekt i samfundets øjne), selvom min familie i virkeligheden er træt af smuds nutidens samfund.

Syntaksen er:

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

Kommandoen kan virke lidt kompleks, lad os nedbryde den lidt og forklare den lidt mere enkelt 😉

  • perl : Hvad vi bruger, perl
  • -pi : Pi, hvordan π (den omtrentlige værdi på 3.14)
  • -e : E forestil dig det for «e at udføre» ^ - ^
  • Derefter i citater » vi åbner med en s og vi lukker med en g: "sg" … Forestil dig S for Start og G for Game Over 😀
  • Drej mellem sg vi skal sætte to sæt parenteser: [] y [], på den måde: "S [] [] g"
  • Inde i de første parenteser, som jeg sagde ovenfor, vil teksten, som vi vil fjerne og erstatte med en ny, gå, mens i det andet sæt parentes vil den nye tekst, der skal placeres, gå efter eksemplet: "S [min familie] [vi] g"

Simpelt er det ikke?

Forklaringen er faktisk meget mere omfattende end hvad der er nødvendigt for kommandoen, det er ret simpelt at forstå 🙂

Perl er meget, meget mere end bare en måde at erstatte tekst på, det er et helt sprog 😉

Hvis du vil lære mere om det, skal du installere pakken perl-doc og se på whooodo hvad det tillader, det er bare et andet univers.

Forresten og for at lukke, forudsat at du vil finde alle de .txt-filer, du har i $ HOME / Dokumenter / og i hver enkelt erstatte "min familie" med "os", kan du deltage i find + perl for at opnå dette:

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

Eller ved hjælp af et jokertegn:

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

Problemet med denne anden variant er, at den ikke erstatter i filer, der er i undermapper 🙂

Alligevel håber jeg, du fandt det interessant. For mig har det været rigtig nyttigt, jeg kan allerede erstatte tekst direkte fra terminalen ... fantastisk! 😀


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   boom sagde han

    Nå, jeg tror, ​​at mange af os her kender sed-kommandoen, der tjener det samme formål, den gør det meget bedre og er lettere at bruge ...

    1.    KZKG ^ Gaara sagde han

      Tak for din kommentar,
      Bare to detaljer, hvorfor siger du, at sed gør det bedre? Er det virkelig lettere at bruge med så mange 'underlige' tegn?

  2.   Federico A. Valdes Toujague sagde han

    Hilsen til alle!!!. Jeg har brugt kommandoen sedog metoden beskrevet her med perl er enklere. Tak KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara sagde han

      Tak for kommentaren 🙂
      Nå, i det mindste ser det ud til, at dette er enklere end almindelige udtryk ... at med så mange 'underlige' tegn kan der gøres noget meget komplekst at forstå og lære for ikke-kyndige.

      1.    giskard sagde han

        Der er et «gammelt» ordsprog derude: «Jeg havde et problem, jeg besluttede at bruge Regular Expressions ... nu har jeg TO problemer» 😉

        1.    KZKG ^ Gaara sagde han

          HAHAHAHAHAHAHA !!!
          Regulære udtryk kan redde vores liv på et bestemt tidspunkt ... ja, det tager lang tid at lære at bruge dem og ikke dø.

          Hvis jeg havde kendt denne kommando for mange år siden, GUD !! hvor simpelt mit liv ville have været 😀

          1.    giskard sagde han

            Klar! Godt håndteret, de er meget kraftfulde 🙂 Intet bedre at manipulere tekst. Men nogle gange, som du siger i dette tilfælde med Perl, behøver du ikke gå så langt, hvis en erstatning er nok.
            Jeg ville alligevel have brugt Python :)

    2.    djæger sagde han

      Men i tørst ser jeg det endnu enklere ... laver jeg noget forkert?

      sed -i "if / what-I-want-to-change / new-to-put /" file-in-which-to-erstatte

      1.    KZKG ^ Gaara sagde han

        he he ... og hvis jeg vil erstatte "http://my.blog.com/content/" med "http://my.blog.com/uploads/files/" 😀 ... allerede der har du at sætte \ med mellemrum og andre, og det bliver komplekst eller ej?

        1.    djæger sagde han

          Det er ikke obligatorisk at bruge / som en separator. Se med +

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

          1.    KZKG ^ Gaara sagde han

            O_O ... WTF!
            Du har åbnet et helt univers af muligheder for mig nu .. O_O

          2.    giskard sagde han

            Jeg elsker disse indlæg, hvor vi alle lærer noget 🙂
            Det vidste jeg heller ikke.

  3.   RAW-Basic sagde han

    Jeg foretrækker at bruge direkte vi ..

    Så simpelt som:
    :% s / os / min familie / g

    % -> hele dokumentet
    s -> søg
    g -> alle forekomster

    Greetings ..

    1.    KZKG ^ Gaara sagde han

      Tak!
      Jeg vidste ikke, hvordan man gør det med vi

  4.   st0rmt4il sagde han

    Tilføjet til favoritter!

    Tak!

  5.   n3 storm sagde han
  6.   DuranG sagde han

    Fantastisk indgang! Hvis nogen er interesserede, er det samme med Linux sed-kommandoen: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Tvivl sagde han

      Og hvad sker der, hvis det, jeg vil erstatte, har citater inden for filen?
      Eksempel erstatte hvad der siger tekst: »1 ″ med tekst:» 2 ″
      hvordan ville kommandoen være?

  7.   Percy salgado sagde han

    hola

    Jeg ønskede at erstatte en streng, der havde en @ i midten og kun ændrede teksten til før-tegnet.

    tekst til ændring: Længe leve Peru
    ny tekst: Viva mi patria @percysalgado
    Vist: Længe leve mit hjemland

    Tak for din hjælp

  8.   Anonymous sagde han

    "\" Du skal bruge skråstreg før tegn med dobbelt brug @, #, så de fortolkes som tekst.

  9.   Gaba sagde han

    Og hvordan gør jeg det i windows ????