У меня есть следующая шестнадцатеричная строка
17a62
Я хочу преобразовать ее в десятичную. Я использую следующий подход:
echo $((16#17a62))
Это приводит к
96866
, но я не хочу этого, я просто хочу заменить «символ алфавита» в строке его десятичным значением. Например, десятичное значение шестнадцатеричного числа равно 10 , поэтому я хочу, чтобы результат был таким:
171062
Как я могу этого добиться? любая помощь будет высоко ценится.
Может сделать это с помощью sed:
$ printf %d $(sed 's/./0x& /g' <<< 17a26b12)
Если Perl является опцией, вы можете сделать что-то вроде этого:
$ echo 17a62 | perl -pe 's/[a-f]/hex $&/e'
171062
Если вам действительно нужно сделать это изначально в оболочке, затем с bash:
$ hexa=17a62
$ [[ $hexa =~ ([0-9]*)([a-f])([0-9]*) ]] && printf '%d%d%d\n' "${BASH_REMATCH[1]}" $((16#"${BASH_REMATCH[2]}")) "${BASH_REMATCH[3]}"
171062