Erstatt tekst i filer med bare en kommando: perl

Noen ganger ønsker vi å erstatte tekst i en fil, for eksempel endre alt som sier «min familie» til «oss» i Document.txt . For å gjøre dette kan vi bruke vår foretrukne teksteditor (Kate, Gedit, Sublime Text, osv.), men det er alltid lurt å vite om alternativer, andre måter å oppnå samme resultat på.

Det viser seg at dette kan oppnås med regulære uttrykk ; `sed`-kommandoen er rett og slett fantastisk, den har uendelige variasjoner og alternativer, men ... for de som bare vil erstatte tekst på den minst mulig komplekse måten , gir jeg deg denne mye enklere varianten:

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

Familien min er som alle andres, som din eller naboens. Faktisk prøver familien min å være ansvarlige mennesker i samfunnets øyne, politisk og sosialt korrekte. Men det er en svart får i huset mitt, og det er min rolle, LOL! Jeg har alltid vært den som ikke er redd for å si hva jeg mener (selv om det ikke er sosialt akseptabelt), selv om familien min i realiteten er lei av dagens rotete samfunn.

Følgende kommando vil endre « min familie » til « oss »:

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

Så enkelt er det 

Så teksten ville være:

(…) vi er som alle andres, som dine eller naboens. Faktisk prøver vi å være ansvarlige mennesker i samfunnets øyne, politisk og sosialt korrekte. Men det er en svart får i huset mitt, og det er min rolle, LOL! Jeg har alltid vært den som ikke er redd for å si hva jeg mener (selv om det ikke tilsynelatende er riktig i samfunnets øyne), selv om familien min i virkeligheten er lei av dagens samfunns skittenhet .

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 ned litt 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" …forestill 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 lengre enn det som er nødvendig for kommandoen, den er ganske enkel å forstå 

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

Hvis du vil lære mer om det, installer perl-doc- pakken og ta en titt på alt den tillater; det er rett og slett 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 vil erstatte filer som er i undermapper 

Uansett, jeg håper du fant det interessant. For meg har det vært veldig nyttig, jeg kan nå erstatte tekst direkte fra terminalen... flott! 


Legg til som foretrukket kilde i Google