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
%d
deprintf
é 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.