Erstatt tekst i filer med bare en kommando: perl

Ved visse anledninger ønsker vi å erstatte tekst i en fil, for eksempel endring i Document.txt alt som "familien min" sier for "oss." For å oppnå dette kan vi bruke vår foretrukne tekstredigerer (Kate, Gedit, SublimeText, etc), men det er alltid godt å vite varianter, andre måter å oppnå samme resultat på 🙂

Det skjer at med vanlig uttrykk du kan oppnå dette, sed-kommandoen er ganske enkelt fantastisk, den har uendelige varianter og alternativer, men ... for de som bare vil erstatte tekst fra minst mulig kompleks måte, for dem er det at jeg tar med denne mye enklere varianten:

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

(...) min familie Det er som alle sammen, som din eller din nabo. Faktisk min familie Vi prøver å være ansvarlige mennesker og i samfunnets øyne, politisk og sosialt korrekte. Imidlertid er det et svart sau i huset mitt, og det er min rolle LOL!. Jeg har alltid vært den som ikke er redd for å si hva han synes (selv om det tilsynelatende ikke er riktig i samfunnets øyne), selv om familien min i virkeligheten er lei av skitt dagens samfunn.

Med følgende kommando vil du endre «min familie" av "oss':

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

Det er så enkelt 🙂

Så teksten ville være:

(...) oss Det er som alle sammen, som din eller din nabo. Faktisk oss Vi prøver å være ansvarlige mennesker og i samfunnets øyne, politisk og sosialt korrekte. Imidlertid er det et svart sau i huset mitt, og det er min rolle LOL!. Jeg har alltid vært den som ikke er redd for å si hva han synes (selv om det tilsynelatende ikke er riktig i samfunnets øyne), selv om familien min i virkeligheten er lei av skitt dagens samfunn.

Syntaksen er:

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

Kommandoen kan virke litt kompleks, la oss bryte den litt ned og forklare den litt enklere 😉

  • perl : Hva vi skal bruke, perl
  • -pi : Pi, hvordan π (tilnærmet verdi 3.14)
  • -e : E forestill deg det for «e å utføre» ^ - ^
  • Så i sitater » vi åpner med en s og vi avslutter med en g: "sg" … Se for deg S for Start og G for Game Over 😀
  • Snu mellom sg vi må sette to sett med parenteser: [] y [], å være slik: "S [] [] g"
  • Inne i de første parentesene som jeg sa ovenfor, vil teksten som vi vil fjerne og erstatte med en ny gå, mens i det andre settet med parentes vil den nye teksten å sette, følge eksemplet: "S [min familie] [vi] g"

Enkelt er det ikke?

Forklaringen er faktisk mye mer omfattende enn det som er nødvendig for kommandoen, det er ganske enkelt å forstå 🙂

Perl er mye, mye mer enn bare en måte å erstatte tekst på, det er et helt språk 😉

Hvis du vil lære mer om det, installerer du pakken perl-doc og ta en titt på whooodo hva det tillater, det er bare et annet univers.

Forresten og for å lukke, forutsatt at du vil finne alle .txt-filene du har i $ HOME / Documents / og i hver enkelt erstatte "familien min" med "oss", kan du bli med i find + perl for å oppnå dette:

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

Eller bruke et jokertegn:

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

Problemet med denne andre varianten er at den ikke erstattes i filer som er i undermapper 🙂

Uansett håper jeg du syntes det var interessant. For meg har det vært veldig nyttig, jeg kan allerede erstatte tekst direkte fra terminalen ... flott! 😀


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   boom sa

    Vel, jeg tror at mange av oss her kjenner sed-kommandoen, som tjener det samme formålet, den gjør det mye bedre og er lettere å bruke ...

    1.    KZKG ^ Gaara sa

      Takk for kommentaren,
      Bare to detaljer, hvorfor sier du at sed gjør det bedre? Er det virkelig enklere å bruke med så mange 'rare' tegn?

  2.   Federico A. Valdes Toujague sa

    Hilsen til alle !!!. Jeg har brukt kommandoen tørste, og metoden beskrevet her med perl er enklere. Takk KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara sa

      Takk for kommentaren 🙂
      I det minste for meg virker dette enklere enn vanlige uttrykk ... at med så mange "rare" karakterer kan noe veldig komplisert å forstå og lære gjøres for de som ikke er kunnskapsrike.

      1.    giskard sa

        Det er et «gammelt» ordtak der ute: «Jeg hadde et problem, jeg bestemte meg for å bruke Regular Expressions ... nå har jeg TO problemer» 😉

        1.    KZKG ^ Gaara sa

          HAHAHAHAHAHAHA !!!
          Regelmessige uttrykk kan redde livene våre i et bestemt øyeblikk ... ja, det tar lang tid å lære å bruke dem og ikke dø.

          Hvis jeg hadde kjent denne kommandoen for mange år siden, GUD !! hvor enkelt livet mitt hadde vært 😀

          1.    giskard sa

            Klar! Godt håndtert de er veldig kraftige 🙂 Ingenting bedre å manipulere tekst. Men noen ganger, som du sier i dette tilfellet med Perl, trenger du ikke å gå så langt hvis en erstatning er nok.
            Jeg ville ha brukt Python uansett :)

    2.    dhunter sa

      Men i tørst ser jeg det enda enklere ... gjør jeg noe galt?

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

      1.    KZKG ^ Gaara sa

        he he ... og hvis jeg vil erstatte "http://my.blog.com/content/" med "http://my.blog.com/uploads/files/" 😀 ... der må du sette \ med mellomrom og andre , og det blir komplekst eller ikke?

        1.    dhunter sa

          Det er ikke obligatorisk å bruke / som skilletegn. Se med +

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

          1.    KZKG ^ Gaara sa

            O_O ... WTF!
            Du har åpnet et helt univers med alternativer for meg nå .. O_O

          2.    giskard sa

            Jeg elsker disse innleggene der vi alle lærer noe 🙂
            Det visste jeg ikke heller.

  3.   RAW-Basic sa

    Jeg foretrekker å bruke direkte vi ..

    Så enkelt som:
    :% s / oss / familien min / g

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

    Hilsen ..

    1.    KZKG ^ Gaara sa

      Takk!
      Jeg visste ikke hvordan jeg skulle gjøre det med vi

  4.   st0rmt4il sa

    Lagt til i favoritter!

    Takk!

  5.   DuranG sa

    Flott oppføring! I tilfelle noen er interessert, det samme med Linux sed-kommandoen: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Tviler sa

      Og hva skjer hvis det jeg vil bytte ut i filen har sitater?
      Eksempel erstatt det som sier tekst: »1 ″ med tekst:» 2 ″
      hvordan ville kommandoen være?

  6.   Percy salgado sa

    Hallo

    Jeg ønsket å erstatte en streng som hadde en i midten og bare endret teksten av før kl.

    tekst å endre: Lenge leve Peru
    ny tekst: Viva mi patria @percysalgado
    Vist: Lenge leve hjemlandet mitt

    Takk for hjelpen

  7.   anonym sa

    "\" Du må bruke skråstrek før tegn med dobbel bruk @, #, slik at de tolkes som tekst.

  8.   gaba sa

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