Ersätt text i filer med bara ett kommando: perl

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å smuts dagens 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å smuts dagens 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! 😀


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Bom sade

    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 ...

    1.    KZKG ^ Gaara sade

      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?

  2.   Federico A. Valdes Toujague sade

    Hälsningar till alla!!!. Jag har använt kommandot törstoch metoden som beskrivs här med perl är enklare. Tack KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara sade

      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.

      1.    giskard sade

        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» 😉

        1.    KZKG ^ Gaara sade

          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 😀

          1.    giskard sade

            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å :)

    2.    djägare sade

      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

      1.    KZKG ^ Gaara sade

        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?

        1.    djägare sade

          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

          1.    KZKG ^ Gaara sade

            O_O ... WTF!
            Du har öppnat ett helt universum av alternativ för mig nu ... O_O

          2.    giskard sade

            Jag älskar de här inläggen där vi alla lär oss något 🙂
            Jag visste inte heller det.

  3.   RAW-Basic sade

    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 ..

    1.    KZKG ^ Gaara sade

      Tack!
      Jag visste inte hur jag skulle göra det med vi

  4.   st0rmt4il sade

    Tillagd till favoriter!

    Tack!

  5.   DuranG sade

    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

    1.    Tvivlar sade

      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?

  6.   Percy salgado sade

    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

  7.   anonym sade

    "\" Du måste använda snedstrecket innan tecknen med dubbelanvändning @, #, så att de tolkas som text.

  8.   Gaba sade

    Och hur gör jag det i Windows ????