Successivo: , Precedente: , Su: Esempi   [Contenuti][Indice]


4.2 Incrementare un numero

Questo script è uno dei pochi che spiega come fare calcoli in sed. Ciò è effettivamente possibile,7 ma dev’essere fatto manualmente.

Per incrementare un numero è sufficiente aggiungere 1 all’ultima cifra, sostituendola con la cifra che segue. C’è un’eccezione: quando la cifra è un nove anche le cifre precedenti devono essere incrementate fino a che se ne trovi una che non è un nove.

Questa soluzione di Bruno Haible è molto ingegnosa e acuta perché usa un solo buffer; senza questa limitazione, l’algoritmo usato in Numerare le righe, è più veloce. Funziona rimpiazzando i nove iniziali con un trattino basso, quindi usando molti comandi s per incrementare l’ultima cifra, e alla fine sostituendo di nuovo i trattini con degli zeri.

#!/usr/bin/sed -f

/[^0-9]/ d

# rimpiazza tutti i 9 iniziali con _ (si potrebbe usare qualsiasi altro
# carattere che non sia una cifra)
:d
s/9\(_*\)$/_\1/
td
# incrementa solo l'ultima cifra.  La prima riga aggiunge una cifra più
# significativa di 1 se si deve aggiungere una cifra.
s/^\(_*\)$/1\1/; tn
s/8\(_*\)$/9\1/; tn
s/7\(_*\)$/8\1/; tn
s/6\(_*\)$/7\1/; tn
s/5\(_*\)$/6\1/; tn
s/4\(_*\)$/5\1/; tn
s/3\(_*\)$/4\1/; tn
s/2\(_*\)$/3\1/; tn
s/1\(_*\)$/2\1/; tn
s/0\(_*\)$/1\1/; tn
:n
y/_/0/

Note a piè di pagina

(7)

il guru di sed Greg Ubben ha scritto un’implementazione del calcolatore DC rpn! È distribuito con sed.