Soms willen we tekst in een bestand vervangen, bijvoorbeeld alles wat 'mijn familie' zegt in 'ons' veranderen in Document.txt . Hiervoor kunnen we onze favoriete tekstverwerker gebruiken (Kate, Gedit, Sublime Text, enz.), maar het is altijd goed om alternatieven te kennen, andere manieren om hetzelfde resultaat te bereiken.
Het blijkt dat dit met reguliere expressies mogelijk is; het `sed`-commando is ronduit fantastisch, het heeft eindeloze variaties en opties, maar… voor degenen die tekst op de minst complexe manier mogelijk willen vervangen , presenteer ik deze veel eenvoudigere variant:
Volgens het voorbeeld hebben we het bestand Document.txt in de map $HOME/Document.txt met de volgende tekst:
Mijn familie is net als die van iedereen, zoals die van jou of je buren. Sterker nog, mijn familie probeert zich verantwoordelijk te gedragen in de ogen van de maatschappij, politiek en sociaal correct. Maar er is een buitenbeentje in huis, en dat is mijn rol, haha! Ik ben altijd degene geweest die niet bang is om te zeggen wat ik denk (zelfs als het sociaal niet acceptabel is), hoewel mijn familie eigenlijk helemaal klaar is met de
verkniptemaatschappij van tegenwoordig.
Met het volgende commando wordt " mijn familie " vervangen door " ons ":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Zo simpel is het
Dus de tekst zou zijn:
(…) we zijn net als iedereen, zoals die van jou of je buurman. Sterker nog, we proberen verantwoordelijke mensen te zijn in de ogen van de maatschappij, politiek en sociaal correct. Maar er is een zwart schaap in mijn huis, en dat is mijn rol, haha! Ik ben altijd degene geweest die niet bang is om te zeggen wat ik denk (zelfs als het in de ogen van de maatschappij niet correct lijkt), hoewel mijn familie eigenlijk de
smerigheidvan de huidige maatschappij zat is.
De syntaxis is:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Het commando lijkt misschien een beetje ingewikkeld, laten we het een beetje opsplitsen en het wat eenvoudiger uitleggen
- perl : Wat we zullen gebruiken, perl
- -pi : Pí, hoe π (de geschatte waarde van 3.14)
- -e : De E stelt zich voor dat «e uitvoert» ^ - ^
- Dan tussen aanhalingstekens » we openen met een s en we sluiten af met een g: "sg" …stel je de S voor Start en de G voor Game Over voor
- Draai tussen de sg we moeten twee sets haakjes plaatsen: [] y [], op die manier: "S [] [] g"
- Binnen de eerste haakjes, zoals ik hierboven al zei, zal de tekst die we willen verwijderen en vervangen door een nieuwe gaan, terwijl in de tweede set haakjes de nieuwe tekst die moet worden geplaatst verdwijnt, volgens het voorbeeld: "S [mijn familie] [wij] g"
Simpel is het niet?
De uitleg is eigenlijk veel langer dan wat nodig is voor het commando, het is vrij eenvoudig te begrijpen
Perl is veel, veel meer dan een manier om tekst te vervangen, het is een hele taal
Als je er meer over wilt weten, installeer dan het pakket perl-doc en bekijk alle mogelijkheden die het biedt; het is een compleet andere wereld.
Ter afsluiting, ervan uitgaande dat je alle .txt-bestanden wilt vinden die je in $ HOME / Documents / hebt en in elk bestand "mijn familie" vervangt door "ons", kun je je bij find + perl aansluiten om dit te bereiken:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Of gebruik een jokerteken:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Het probleem met deze tweede variant is dat deze geen bestanden vervangt die zich in submappen bevinden
Hoe dan ook, ik hoop dat je het interessant vond. Voor mij was het erg nuttig, ik kan nu tekst rechtstreeks vanuit de terminal vervangen... geweldig!