Bash: я хочу считать буквы и подставлять текст

248
DrManhattan

Итак, я чрезвычайно новичок в написании сценариев оболочки Bash, и до этого момента я был довольно успешным. Я использую BASH, чтобы исправить проблему ...

Я хочу превратить базовое доменное имя: Buddies.forlife.com в | 07 | Buddies | 07 | forlife | 03 | com

По сути, мне нужно, чтобы считать буквы и преобразовать его в шестнадцатеричное. Чтобы было понятно, не конвертируйте доменное имя в шестнадцатеричное, а количество букв в шестнадцатеричное. Мне трудно заменить период "."

Я надеюсь, вы понимаете, чего я пытаюсь достичь ...

Спасибо за помощь в продвижении!

-1
Итак, вы решили подсчет и хотите, чтобы мы рассказали вам, как заменить периоды? a CVn 7 лет назад 0
Хорошо оба, если это возможно. Я вручную заклинил эти цифры, чтобы продемонстрировать результат, который я ищу. DrManhattan 7 лет назад 0
Да, и счет в шестнадцатеричном формате, поэтому после чисел ... 0a, 0b .... остальное получишь. DrManhattan 7 лет назад 0

1 ответ на вопрос

0
Argonauts

Here is a straightforward way to do this using 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 

The awk command is setting the field separator -F '.' to a period, so each segment is considered it's own field.

We can then refer to those fields by $1, $2 and $3, use the builtin function length to get the character count for each field, and use a printf to print out the results (%x for hex numbers, %s for the original strings, and output field separation using the '|' symbol, in the format you had specified.

The 0xprefix is typically used to indicate hex numbers, but can be changed to something else (or nothing) as needed.