11.04.2013 Views

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

# head:<br />

# l’opzione -c4 considera solamente i primi 4 byte.<br />

Capitolo 12. Filtri, programmi e coman<strong>di</strong> esterni<br />

# od:<br />

# L’opzione -N4 limita l’output a 4 byte.<br />

# L’opzione -tu4 seleziona, per l’output, il formato decimale senza segno.<br />

# sed:<br />

# L’opzione -n, in combinazione con l’opzione "p" del comando "s", prende<br />

#+ in considerazione, per l’output, solo le righe verificate.<br />

# L’autore <strong>di</strong> questo script spiega l’azione <strong>di</strong> ’sed’ come segue.<br />

# head -c4 /dev/urandom | od -N4 -tu4 | sed -ne ’1s/.* //p’<br />

# ----------------------------------> |<br />

# Assumiamo che l’output fino a "sed">|<br />

# sia 0000000 1198195154\n<br />

# sed inizia leggendo i caratteri: 0000000 1198195154\n.<br />

# Qui trova il carattere <strong>di</strong> ritorno a capo, quin<strong>di</strong> è pronto per elaborare<br />

#+ la prima riga (0000000 1198195154), che assomiglia alla sua <strong>di</strong>rettiva<br />

#+ . La prima ed unica è<br />

# righe coman<strong>di</strong><br />

# 1 s/.* //p<br />

# Il numero della riga è nell’intervallo, quin<strong>di</strong> entra in azione:<br />

#+ cerca <strong>di</strong> sostituire la stringa più lunga terminante con uno spazio<br />

#+ ("0000000 ") con niente "//" e in caso <strong>di</strong> successo, visualizza il risultato<br />

#+ ("p" è l’opzione del comando "s", ed è <strong>di</strong>fferente dal comando "p").<br />

# sed ora continua la lettura dell’input. (Notate che prima <strong>di</strong> continuare, se<br />

#+ non fosse stata passata l’opzione -n, sed avrebbe visualizzato la riga<br />

#+ un’altra volta).<br />

# sed adesso legge la parte <strong>di</strong> caratteri rimanente, e trova la fine del file.<br />

# Si appresta ad elaborare la seconda riga (che può anche essere numerata<br />

#+ con ’$’ perché è l’ultima).<br />

# Constata che non è compresa in e quin<strong>di</strong> termina il lavoro.<br />

# In poche parole, questo comando sed significa: "Solo sulla prima riga, togli<br />

#+ qualsiasi carattere fino allo spazio, quin<strong>di</strong> visualizza il resto."<br />

# Un modo migliore per ottenere lo stesso risultato sarebbe stato:<br />

# sed -e ’s/.* //;q’<br />

# Qui abbiamo due e due (si sarebbe potuto anche scrivere<br />

# sed -e ’s/.* //’ -e q):<br />

# righe coman<strong>di</strong><br />

253

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!