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
skittdagens 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
skittdagens 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! 😀
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 ...
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?
Hilsen til alle !!!. Jeg har brukt kommandoen tørste, og metoden beskrevet her med perl er enklere. Takk KZKG ^ Gaara !!!.
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.
Det er et «gammelt» ordtak der ute: «Jeg hadde et problem, jeg bestemte meg for å bruke Regular Expressions ... nå har jeg TO problemer» 😉
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 😀
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 :)
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
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?
Det er ikke obligatorisk å bruke / som skilletegn. Se med +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» file
O_O ... WTF!
Du har åpnet et helt univers med alternativer for meg nå .. O_O
Jeg elsker disse innleggene der vi alle lærer noe 🙂
Det visste jeg ikke heller.
Jeg foretrekker å bruke direkte vi ..
Så enkelt som:
:% s / oss / familien min / g
% -> hele dokumentet
s -> søk
g -> alle forekomster
Hilsen ..
Takk!
Jeg visste ikke hvordan jeg skulle gjøre det med vi
Lagt til i favoritter!
Takk!
Ta en titt hvis du har litt av rpl-kommandoen
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
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
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?
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
"\" Du må bruke skråstrek før tegn med dobbel bruk @, #, slik at de tolkes som tekst.
Og hvordan gjør jeg det i windows ????