Ibland vill vi ersätta text i en fil, till exempel ändra allt som säger "min familj" till "oss" i Document.txt . För att göra detta kan vi använda vår föredragna textredigerare (Kate, Gedit, Sublime Text, etc.), men det är alltid bra att känna till alternativ, andra sätt att uppnå samma resultat.
Det visar sig att detta kan uppnås med reguljära uttryck ; `sed`-kommandot är helt enkelt magnifikt, det har oändliga variationer och alternativ, men… för de som bara vill ersätta text på det minst komplexa sättet , presenterar jag denna mycket enklare variant:
Enligt exemplet har vi filen Document.txt i $HOME/Document.txt med följande text:
Min familj är som alla andras, som din eller din grannes. Faktum är att min familj försöker vara ansvarsfulla människor i samhällets ögon, politiskt och socialt korrekta. Men det finns ett svart får i mitt hus, och det är min roll, LOL! Jag har alltid varit den som inte är rädd för att säga vad jag tycker (även om det inte är socialt acceptabelt), även om min familj i verkligheten är trötta på dagens
kaosiga samhälle.
Följande kommando ändrar " min familj " till " oss ":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Så enkelt är det
Så texten skulle vara:
(...) vi är som alla andras, som dina eller din grannes. Faktum är att vi försöker vara ansvarsfulla människor i samhällets ögon, politiskt och socialt korrekta. Men det finns ett svart får i mitt hus, och det är min roll, LOL! Jag har alltid varit den som inte är rädd för att säga vad jag tycker (även om det inte verkar korrekt i samhällets ögon), även om min familj i verkligheten är trötta på dagens samhälles
smuts .
Syntaksen är:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Kommandot kan verka lite komplext, låt oss bryta ner det lite och förklara det lite enklare
- perl : Vad vi ska använda, perl
- -pi : Pi, hur π (det ungefärliga värdet 3.14)
- -e : E föreställ dig det för «e att köra» ^ - ^
- Sedan i citat » vi öppnar med en s och vi avslutar med en g: "sg" …föreställ dig S för Start och G för Game Over
- Vänd dig mellan sg vi måste sätta två uppsättningar parenteser: [] y [], på det sättet: "S [] [] g"
- Inuti de första parenteserna som jag sa ovan kommer texten som vi vill ta bort och ersätta med en ny att gå, medan i den andra uppsättningen parenteser kommer den nya texten att sätta, enligt exemplet: "S [min familj] [vi] g"
Enkelt är det inte?
Förklaringen är faktiskt mycket längre än vad som är nödvändigt för kommandot, det är ganska enkelt att förstå
Perl är mycket, mycket mer än ett sätt att ersätta text, det är ett helt språk
Om du vill lära dig mer om det, installera perl-doc -paketet och ta en titt på allt det tillåter; det är helt enkelt ett annat universum.
Förresten och för att stänga, förutsatt att du vill hitta alla .txt-filer som du har i $ HOME / Dokument / och i var och en ersätta "min familj" med "oss", kan du gå med på hitta + perl för att uppnå detta:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Eller med ett jokertecken:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Problemet med denna andra variant är att den inte kommer att ersätta filer som finns i undermappar
Hur som helst, jag hoppas att du tyckte att det var intressant. För mig har det varit riktigt användbart, jag kan nu byta ut text direkt från terminalen... jättebra!