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
smudsnutidens 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
smudsnutidens 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! 😀
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 ...
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?
Hilsen til alle!!!. Jeg har brugt kommandoen sedog metoden beskrevet her med perl er enklere. Tak KZKG ^ Gaara !!!.
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.
Der er et «gammelt» ordsprog derude: «Jeg havde et problem, jeg besluttede at bruge Regular Expressions ... nu har jeg TO problemer» 😉
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 😀
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 :)
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
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?
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
O_O ... WTF!
Du har åbnet et helt univers af muligheder for mig nu .. O_O
Jeg elsker disse indlæg, hvor vi alle lærer noget 🙂
Det vidste jeg heller ikke.
Jeg foretrækker at bruge direkte vi ..
Så simpelt som:
:% s / os / min familie / g
% -> hele dokumentet
s -> søg
g -> alle forekomster
Greetings ..
Tak!
Jeg vidste ikke, hvordan man gør det med vi
Tilføjet til favoritter!
Tak!
Se på det, hvis du har lidt af rpl-kommandoen
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
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
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?
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
"\" Du skal bruge skråstreg før tegn med dobbelt brug @, #, så de fortolkes som tekst.
Og hvordan gør jeg det i windows ????