Bash: voglio contare le lettere e sostituire il testo


-1

OK, quindi sono estremamente nuovo a bash scripting shell e ho avuto abbastanza successo fino a questo punto. Sto usando BASH per risolvere un problema ...

Voglio trasformare un nome di dominio di base: Buddies.forlife.com in | 07 | Amici | 07 | forlife | 03 | com

Fondamentalmente, ne ho bisogno per contare le lettere e convertirle in esadecimali. Per essere chiari, non convertire il nome di dominio in esadecimale, ma la lettera conta in esadecimale. Sto facendo fatica a sostituire il periodo "."

Spero tu capisca cosa sto cercando di ottenere ...

Grazie per l'aiuto in anticipo!


Quindi hai risolto il conteggio e vuoi che ti diciamo come sostituire i periodi?
un CVn

Bene entrambi se possibile. Ho inceppato a mano quei numeri per dimostrare il risultato che sto cercando.
DrManhattan,

Oh e il conteggio è in esadecimale, quindi dopo i numeri ... 0a, 0b .... ottieni il resto.
DrManhattan,

Risposte:


0

Ecco un modo semplice per farlo usando awk

echo "Buddies.forlife.com" | awk -F '.' '{ printf( "|0x%x|%s|0x%x|%s|0x%x|%s\n", length($1),$1, length($2),$2, length ($3), $3 )}'
|0x7|Buddies|0x7|forlife|0x3|com

Il comando awk sta impostando il separatore di campo -F '.'su un punto, quindi ogni segmento è considerato il proprio campo.

Possiamo quindi fare riferimento a quei campi mediante $1, $2 and $3, utilizzare la funzione integrata lengthper ottenere il conteggio dei caratteri per ciascun campo e utilizzare un printf per stampare i risultati ( %xper numeri esadecimali, %sper le stringhe originali e separazione dei campi di output usando '|' simbolo, nel formato specificato.

Il 0xprefisso viene in genere utilizzato per indicare numeri esadecimali, ma può essere modificato in qualcos'altro (o nulla) secondo necessità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.