Bash: je veux compter les lettres et remplacer le texte

-1

OK, je suis très novice dans le script shell bash et j’ai eu beaucoup de succès jusqu’à présent. J'utilise BASH pour résoudre un problème ...

Je souhaite transformer un nom de domaine de base: Buddies.forlife.com en | 07 | Buddies | 07 | forlife | 03 | com

Fondamentalement, j'ai besoin de compter les lettres et de les convertir en hexadécimal. Pour être clair, ne convertissez pas le nom de domaine en hex, mais la lettre compte en hex. J'ai du mal à remplacer le point "."

J'espère que vous comprenez ce que j'essaie de réaliser ...

Merci pour l'aide à l'avance!

DrManhattan
la source
Donc, vous avez résolu le compte, et vous voulez que nous vous disions comment remplacer les règles?
un CVn
Bien les deux si possible. J'ai remis ces chiffres pour montrer le résultat que je cherchais.
DrManhattan
Oh, et le compte est en hexa donc après les nombres ... 0a, 0b ... vous obtenez le reste.
DrManhattan

Réponses:

0

Voici un moyen simple de faire cela en utilisant 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

La commande awk définit le séparateur de champ -F '.'sur un point. Chaque segment est considéré comme son propre champ.

Nous pouvons ensuite faire référence à ces champs par $1, $2 and $3, utiliser la fonction intégrée lengthpour obtenir le nombre de caractères pour chaque champ et utiliser un printf pour imprimer les résultats ( %xpour les nombres hexadécimaux, %spour les chaînes d'origine et la séparation des champs de sortie à l'aide de la commande '|' symbole, dans le format que vous avez spécifié.

Le 0xpréfixe est généralement utilisé pour indiquer les nombres hexadécimaux, mais peut être changé en autre chose (ou rien) selon les besoins.

Argonautes
la source