Sostituisci il testo all'interno dei file con un solo comando: perl

In alcune occasioni vogliamo sostituire il testo all'interno di un file, ad esempio, cambiare in Document.txt tutto quello che "la mia famiglia" dice per "noi". Per ottenere ciò possiamo utilizzare il nostro editor di testo preferito (Kate, Gedit, SublimeText, ecc.) Ma è sempre bene conoscere varianti, altri modi per ottenere lo stesso risultato 🙂

Succede che con espressioni regolari puoi ottenere questo, il comando sed è semplicemente magnifico, ha infinite varianti e opzioni ma ... per coloro che vogliono solo sostituire il testo dal modo meno complesso possibile, per loro è che porto questa variante molto più semplice:

Seguendo l'esempio, abbiamo il file Document.txt situato in $ HOME / Document.txt con il seguente testo:

(...) la mia famiglia È come tutti loro, come il tuo o il tuo vicino. Infatti la mia famiglia Cerchiamo di essere persone responsabili e agli occhi della società, politicamente e socialmente corretti. Tuttavia, a casa mia c'è una pecora nera, e questo è il mio ruolo LOL!. Sono sempre stato quello che non ha paura di dire quello che pensa (anche se apparentemente non è corretto agli occhi della società), anche se in realtà la mia famiglia è stufo del sporcizia società odierna.

Con il seguente comando cambierai «la mia famiglia"di"noi":

perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt

È così semplice 🙂

Quindi il testo sarebbe:

(...) noi È come tutti loro, come il tuo o il tuo vicino. Infatti noi Cerchiamo di essere persone responsabili e agli occhi della società, politicamente e socialmente corretti. Tuttavia, a casa mia c'è una pecora nera, e questo è il mio ruolo LOL!. Sono sempre stato quello che non ha paura di dire quello che pensa (anche se apparentemente non è corretto agli occhi della società), anche se in realtà la mia famiglia è stufo del sporcizia società odierna.

La sintassi è:

perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar

Il comando può sembrare un po 'complesso, analizziamolo un po' e spieghiamo un po 'più semplicemente 😉

  • perl : Cosa useremo, perl
  • -pi : Pí, come π (il valore approssimativo di 3.14)
  • -e : La E lo immagina per «e da eseguire» ^ - ^
  • Quindi tra virgolette » apriamo con a s e chiudiamo con a g: "sg" ... Immagina la S per Start e la G per Game Over 😀
  • Girare tra i file sg dobbiamo mettere due serie di parentesi: [] y [], essendo in questo modo: "S [] [] g"
  • All'interno delle prime parentesi come ho detto sopra, andrà il testo che vogliamo rimuovere e sostituire con uno nuovo, mentre nella seconda serie di parentesi andrà il nuovo testo da inserire, seguendo l'esempio: "S [la mia famiglia] [noi] g"

Semplice no?

La spiegazione è in realtà molto più ampia di quanto necessario per il comando, è abbastanza semplice da capire 🙂

Perl è molto, molto di più di un semplice modo per sostituire il testo, è un intero linguaggio 😉

Se vuoi saperne di più, installa il pacchetto perl-doc e dai un'occhiata a whooodo cosa permette, è solo un universo diverso.

A proposito e per chiudere, supponendo che tu voglia trovare tutti i file .txt che hai in $ HOME / Documenti / e in ognuno sostituire "la mia famiglia" con "noi", puoi unirti a find + perl per ottenere questo:

find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;

O utilizzando un carattere jolly:

perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt

Il problema con questa seconda variante è che non verrà sostituita nei file che si trovano nelle sottocartelle

Comunque, spero che tu l'abbia trovato interessante. Per me è stato davvero utile, posso già sostituire il testo direttamente da terminale ... fantastico! 😀


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   Boom suddetto

    Bene, penso che molti di noi qui conoscano il comando sed, che ha lo stesso scopo, lo rende molto migliore ed è più facile da usare ...

    1.    KZKG ^ Gaara suddetto

      Grazie per il tuo commento,
      Solo due dettagli, perché dici che sed lo rende migliore? È davvero più facile da usare con così tanti personaggi "strani"?

  2.   Federico A. Valdes Toujague suddetto

    Grazie a tutti!!!. Ho usato il comando setee il metodo qui descritto con perl è più semplice. Grazie KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara suddetto

      Grazie per il commento 🙂
      Beh, almeno mi sembra che questo sia più semplice delle espressioni regolari ... che con così tanti personaggi "strani", qualcosa di veramente complesso da capire e da imparare può essere fatto ai non esperti.

      1.    Giskard suddetto

        C'è un «vecchio» adagio là fuori: «Ho avuto un problema, ho deciso di usare le espressioni regolari ... ora ho DUE problemi» 😉

        1.    KZKG ^ Gaara suddetto

          HAHAHAHAHAHAHA !!!
          Le espressioni regolari possono salvare le nostre vite a un certo punto ... sì, ci vuole molto tempo per imparare a usarle e non morire provandoci.

          Se avessi conosciuto questo comando anni fa, DIO !! quanto sarebbe stata semplice la mia vita 😀

          1.    Giskard suddetto

            Chiaro! Ben gestiti sono molto potenti 🙂 Niente di meglio per manipolare il testo. Ma a volte, come dici in questo caso con Perl, non devi andare così lontano se una sostituzione è sufficiente.
            Avrei comunque usato Python :)

    2.    cacciatore suddetto

      Ma nella sete lo vedo ancora più semplice ... sto facendo qualcosa di sbagliato?

      sed -i "sì / cosa-voglio-cambiare / nuovo-da-inserire /" file-in-che-sostituire

      1.    KZKG ^ Gaara suddetto

        heh heh ... e se voglio sostituire "http://my.blog.com/content/" con "http://my.blog.com/uploads/files/" 😀 ... già lì devi mettere \ con spazi e altri e diventa complesso o no?

        1.    cacciatore suddetto

          Non è obbligatorio utilizzare / come separatore. Guarda con +

          sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» file

          1.    KZKG ^ Gaara suddetto

            O_O ... WTF!
            Mi hai aperto un intero universo di opzioni ora .. O_O

          2.    Giskard suddetto

            Adoro questi post in cui tutti impariamo qualcosa 🙂
            Non lo sapevo nemmeno io.

  3.   RAW-Base suddetto

    Preferisco usare direttamente vi ..

    Semplice come:
    :% s / us / my family / g

    % -> intero documento
    s -> cerca
    g -> tutte le occorrenze

    Saluti ..

    1.    KZKG ^ Gaara suddetto

      Grazie!
      Non sapevo come farlo con vi

  4.   st0rmt4il suddetto

    Aggiunto ai preferiti!

    Grazie!

  5.   Durang suddetto

    Ottima voce! Nel caso qualcuno sia interessato, lo stesso con il comando sed di Linux: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Dubitando suddetto

      E cosa succede se all'interno del file quello che voglio sostituire ha delle virgolette?
      Esempio sostituire il testo: »1 ″ con il testo:» 2 ″
      come sarebbe il comando?

  6.   Percy salgado suddetto

    Ciao

    Volevo sostituire una stringa che aveva un @ nel mezzo e ha cambiato solo il testo prima del segno.

    testo da modificare: Lunga vita al Perù
    nuovo testo: Viva mi patria @percysalgado
    In figura: lunga vita alla mia patria

    Grazie per l'aiuto

  7.   anonimo suddetto

    "\" Devi usare la barra prima dei caratteri con doppio uso @, #, in modo che vengano interpretati come testo.

  8.   Gaba suddetto

    E come lo faccio in Windows ????