Bash: Chcę liczyć litery i zastępować tekst

-1

OK, więc jestem wyjątkowo nowy w skryptowaniu powłoki bash i do tej pory odnoszę sukcesy. Korzystam z BASH, aby naprawić problem ...

Chcę zmienić podstawową nazwę domeny: Buddies.forlife.com w | 07 | Buddies | 07 | forlife | 03 | com

Zasadniczo muszę go policzyć i przekonwertować na heks. Żeby było jasne, nie przekształcaj nazwy domeny na szesnastkową, ale liczbę liter na szesnastkową. Z trudem zastępuję kropkę „”.

Mam nadzieję, że rozumiesz, co próbuję osiągnąć ...

Z góry dziękuję za pomoc!

DrManhattan
źródło
Więc rozwiązałeś liczenie i chcesz, abyśmy powiedzieli ci, jak zastąpić kropki?
CVn
Oba, jeśli to możliwe. Wcisnąłem te liczby, aby zademonstrować wynik, którego szukam.
DrManhattan
Aha, a liczba jest szesnastkowa, więc po liczbach ... 0a, 0b .... dostaniesz resztę.
DrManhattan

Odpowiedzi:

0

Oto prosty sposób, aby to zrobić za pomocą 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

Komenda awk ustawia separator pól -F '.'na kropkę, więc każdy segment jest uważany za własne pole.

Następnie możemy odwołać się do tych pól $1, $2 and $3, użyć funkcji wbudowanej, lengthaby uzyskać liczbę znaków dla każdego pola, i użyć printf do wydrukowania wyników ( %xdla liczb szesnastkowych, %sdla oryginalnych ciągów i separacji pól wyjściowych za pomocą „|” symbol w określonym formacie.

0xPrefiks jest zazwyczaj używany do wskazania liczby HEX, ale można zmienić na coś innego (lub nic), ile potrzeba.

Argonauci
źródło