Questo potrebbe funzionare per voi (GNU SED) :
sed -r ':a;/AAAAAA/{x;:b;s/9(_*)$/_\1/;tb;s/^(_*)$/0\1/;s/$/:/;s/([^_])(_*):.*\1(.).*/\3\2/;s/_/0/g;x;G;s/AAAAAA(.*)\n(.*)/\2\1/;ta}' file
Questo è un esempio di giocattolo, perl o awk sarebbe la soluzione migliore per una soluzione.
La soluzione agisce solo sulle righe che contengono la stringa richiesta (AAAAAA
).
Il buffer di mantenimento viene utilizzato come posizione per mantenere il numero intero incrementato.
In visione: quando si incontra una stringa richiesto, il numero intero nello spazio stiva viene incrementato, allegata alla riga corrente, scambiato per la stringa richiesta e il processo viene ripetuto fino a quando tutte le occorrenze della stringa sono contabilizzati.
L'incremento di un intero scambia semplicemente l'ultima cifra (diversa da quella finale di 9) per il numero intero successivo in sequenza, ovvero da 0 a 1, da 1 a 2 ... da 8 a 9. Quando si verificano 9 finali, ogni 9 finale viene sostituito da un carattere non intero es. '_'. Se il numero che si incrementa consiste interamente di 9 finali, a fronte del numero viene aggiunto 0
in modo che possa essere incrementato a 1
. Dopo l'operazione di incremento, gli ultimi 9 (ora _
) vengono sostituiti da "0".
Come esempio dire il numero intero 9 deve essere incrementato:
9
è sostituito da _
, un 0
viene anteposta (0_
), il 0
viene scambiato per 1 (1_
), il _
è sostituito dal 0
. risultante nel numero 10
.
Vedere commenti diretti a @jaypal per ulteriori note.
Qualcuno ha chiesto lo stesso problema nel tag rubino ieri. Mi chiedo solo se voi ragazzi siete nella stessa classe. – devnull