Vid vissa tillfällen vill vi ersätta text i en fil, till exempel ändring Document.txt allt som "min familj" säger för "oss". För att uppnå detta kan vi använda vår föredragna textredigerare (Kate, Gedit, SublimeText, etc) men det är alltid bra att känna till varianter, andra sätt att uppnå samma resultat 🙂
Det händer att med vanliga uttryck detta kan uppnås, sed-kommandot är helt enkelt magnifikt, det har oändliga varianter och alternativ men ... för dem som bara vill ersätta text från minst komplexa möjliga sättet, för dem är det att jag tar med denna mycket enklare variant:
Efter exemplet har vi filen Document.txt beläget i $ HOME / Document.txt med följande text:
(...) min familj Det är som alla, som din eller din granne. Faktiskt min familj Vi försöker vara ansvarsfulla människor och i samhällets ögon politiskt och socialt korrekta. Men i mitt hus finns det ett svart får, och det är min roll LOL!. Jag har alltid varit den som inte är rädd för att säga vad han tycker (även om det tydligen inte är korrekt i samhällets ögon), även om min familj i själva verket är trött på
smutsdagens samhälle.
Med följande kommando ändrar du «min familj" förbi "oss':
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Det är så enkelt 🙂
Så texten skulle vara:
(...) oss Det är som alla, som din eller din granne. Faktiskt oss Vi försöker vara ansvarsfulla människor och i samhällets ögon politiskt och socialt korrekta. Men i mitt hus finns det ett svart får, och det är min roll LOL!. Jag har alltid varit den som inte är rädd för att säga vad han tycker (även om det tydligen inte är korrekt i samhällets ögon), även om min familj i själva verket är trött på
smutsdagens samhälle.
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 mer omfattande än vad som är nödvändigt för kommandot, det är ganska enkelt att förstå 🙂
Perl är mycket, mycket mer än bara ett sätt att ersätta text, det är ett helt språk 😉
Om du vill lära dig mer om det, installera paketet perl-doc och titta på whooodo vad det tillåter, det är bara 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ättas i filer som finns i undermappar 🙂
Hur som helst, jag hoppas att du tyckte det var intressant. För mig har det varit väldigt användbart, jag kan redan ersätta text direkt från terminalen ... bra! 😀
Jag tror att många av oss här känner till kommandot sed, som tjänar samma syfte, det gör det mycket bättre och är lättare att använda ...
Tack för din kommentar,
Bara två detaljer, varför säger du att sed gör det bättre? Är det verkligen lättare att använda med så många "konstiga" karaktärer?
Hälsningar till alla!!!. Jag har använt kommandot törstoch metoden som beskrivs här med perl är enklare. Tack KZKG ^ Gaara !!!.
Tack för kommentaren 🙂
Tja, åtminstone för mig verkar detta enklare än vanliga uttryck ... att med så många "konstiga" karaktärer kan något riktigt komplext att förstå och lära sig göras för de som inte är kunniga.
Det finns ett «gammalt» ordspråk där ute: «Jag hade ett problem, jag bestämde mig för att använda Regular Expressions ... nu har jag två problem» 😉
HAHAHAHAHAHAHA !!!
Regelbundna uttryck kan rädda våra liv vid en viss tidpunkt ... ja, det tar lång tid att lära sig att använda dem och inte dö.
Om jag hade känt detta kommando för många år sedan, GUD !! hur enkelt mitt liv skulle ha varit 😀
Klar! Bra hanterade, de är mycket kraftfulla 🙂 Inget bättre att manipulera text. Men ibland, som du säger i det här fallet med Perl, behöver du inte gå så långt om en ersättare räcker.
Jag skulle ha använt Python ändå :)
Men i törst ser jag det ännu enklare ... gör jag något fel?
sed -i "if / what-I-want-to-change / new-to-put /" fil-att-ersätta
he he ... och om jag vill ersätta "http://my.blog.com/content/" med "http://my.blog.com/uploads/files/" already ... redan där måste du sätta \ med mellanslag och andra , och det blir komplicerat eller inte?
Det är inte obligatoriskt att använda / som separator. Titta med +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» fil
O_O ... WTF!
Du har öppnat ett helt universum av alternativ för mig nu ... O_O
Jag älskar de här inläggen där vi alla lär oss något 🙂
Jag visste inte heller det.
Jag föredrar att använda direkt vi ..
Lika enkelt som:
:% s / oss / min familj / g
% -> hela dokumentet
s -> sök
g -> alla förekomster
Hälsningar ..
Tack!
Jag visste inte hur jag skulle göra det med vi
Tillagd till favoriter!
Tack!
Ta en titt om du har en stund till rpl-kommandot
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Bra inträde! Om någon är intresserad, samma sak med kommandot Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
Och vad händer om det jag vill byta ut i filen har citat?
Exempel ersätter det som säger text: »1 ″ med text:» 2 ″
hur skulle kommandot vara?
Hallå
Jag ville byta ut en sträng som hade en @ i mitten och bara ändrade texten före före kl.
text att ändra: Länge leve Peru
ny text: Viva mi patria @percysalgado
Visad: Länge mitt hemland
Tack för din hjälp
"\" Du måste använda snedstrecket innan tecknen med dubbelanvändning @, #, så att de tolkas som text.
Och hur gör jag det i Windows ????