Usando sed e bash
$ printf '%d.%d.%d.%d\n' $(echo 80D00297 | sed 's/../0x& /g')
128.208.2.151
Como funciona:
-
sedé usado para reformatar o número:$ echo 80D00297 | sed 's/../0x& /g' 0x80 0xD0 0x02 0x97 -
O formato
%ddeprintfé usado para converter os números hexadecimais em decimais.
Usando o GNU awk
$ echo 80D00297 | gawk --non-decimal-data '{for (i=1;i<=NF;i++) printf "%d%s","0x"$i,(i==NF?"\n":".")}' FPAT='..'
128.208.2.151
Isso usa FPAT='..' para dividir a entrada em dois campos de caractere. Em seguida, percorremos cada campo, colocamos um 0x na frente dele e o alimentamos para printf com o formato %d , de modo que o número hexadecimal seja convertido em decimal.
Uma parte aparentemente complexa do acima é a declaração ternária (i==NF?"\n":".") . Esta declaração retorna um caractere de nova linha se estivermos no último campo, i==NF . Para outros valores de i , retorna um período, . . Dessa forma, os números são separados por um período, mas o número final é seguido por um caractere de nova linha.