lunedì 23 giugno 2014

Cose di Sed

Dopo una giornata trascorsa al mare, sono stato colto da un dubbio esistenziale. Cosa che, forse, neanche Juhan.... No, no, lui lo saprà di sicuro!!

In questi giorni sto lavorando ad uno script in bash, presto vi dirò ogni cosa, ma oggi no. Oggi solo il dubbio esistenziale, poi fugato.

Ha a che fare con sed. Una cosa alla volta, però.

$ testo="ciao salve ciao ciao salve ciao ciao salve"

Ecco. Una variabile. Solo per velocizzare le cose. Avrei potuto usare anche un file di testo.

Se a sed chiedo di sostituire ciao con CIAO, mi cambia tutti i "ciao" della frase. Ecco il dubbio, io voglio che sostituisca solo il terzo ciao. Capite?

Perchè cambi solo il primo ciao, è facile. Basta omettere la /g, che sta per global replacement.

$ echo $testo | sed 's/ciao/CIAO/g'

CIAO salve CIAO CIAO salve CIAO CIAO salve

ma se tolgo la g...

$ echo $testo | sed 's/ciao/CIAO/'

CIAO salve ciao ciao salve ciao ciao salve

Vedete? Viene sostituita solo la prima occorrenza, ma non ci siamo ancora!

Eppure la soluzione era semplicissima, ma si sa, ciò che è semplice non è mai un prima, è sempre un dopo. In realtà bastava fare così:

$ echo $testo | sed 's/ciao/CIAO/3'

ciao salve ciao CIAO salve ciao ciao salve

Ora è semplice, infatti...

$ echo $testo | sed 's/ciao/CIAO/4'

ciao salve ciao ciao salve CIAO ciao salve

Ma non è finita! Potrei dire a Sed, ad esempio, di sostituire le occorrenze da un certo punto in poi...

$ echo $testo | sed 's/ciao/CIAO/3g'

ciao salve ciao CIAO salve CIAO CIAO salve

Dalla terza occorrenza in poi, solo "CIAO".

Poi c'è pure chi fa così:

$ echo $testo | sed 's/ciao/CIAO/2' | sed 's/ciao/CIAO/3'

ciao salve CIAO ciao salve CIAO ciao salve


Vabbè, alla prossima. ;)

P.S. Non so come dirvelo, ma questa dovrebbe essere la prima lezione del corso di sed, ecco.


7 commenti:

  1. Bravo! Posso citare Dennis Ritchie, capita proprio a fagiolo? Si riferisce a Unix, il papà di Linux, vale tuttora, credo, anzi ne sono certo. "UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity"
    Read more at http://www.brainyquote.com/quotes/authors/d/dennis_ritchie.html#8Z6Oii3mrpHMAXLH.99

    RispondiElimina
  2. Aaaah quel Ps è troppo piccolo per i miei occhi XD XD XD

    RispondiElimina
  3. Grazie al tuo post e al commento di Nino, ho fatto una mini ricerca ed ho scoperto che Dennis Ritchie è il creatore del linguaggio C... :-)

    RispondiElimina
  4. Allora ve ne racconto un'altra di DMR. Quando qualcuno gli chiese quanto tempo ci volesse per imparare il C rispose che lui non lo sapeva, non aveva mai dovuto impararlo.

    RispondiElimina
    Risposte
    1. Ma era veramente un mito!!! (L'acronimo però spaventa...)

      Elimina
  5. Quest'uomo (DMR) è un mito! Ma anche Nino... :-)

    RispondiElimina