shell script - subtrai 1 do endereço mac hexadecimal e adiciona dois pontos a ele

2
  1. Eu tenho um endereço MAC como 'C4:B9:83:7F:FF:AC' e

  2. Eu quero subtrair 1 de seus valores hexadecimais, que é C4B9837FFFAC , então ele se tornará C4B9837FFFAB

  3. e depois disso, quero adicionar novamente dois pontos para torná-lo formatado por dois pontos, como C4:B9:83:7F:FF:AB

Eu encontrei alguma solução que faz o trabalho para os dois primeiros passos,

#!/bin/sh
mac="C4:B9:83:7F:FF:AC"
machex=$( echo "$mac" | tr -d ':' ) # to remove colons
macdec=$( printf "%d\n" 0xC4B9837FFFAC ) # to convert to decimal
macdec1=$( expr $macdec - 1 ) # to subtract one 
machex1=$( printf "%x\n" $maclandec ) # to convert to hex again 
echo "$machex1" 

que produzirá C4B9837FFFAB

Como posso adicionar dois pontos para torná-lo C4:B9:83:7F:FF:AB ?

existe alguma outra maneira de fazer isso?

    
por Straw Hat 14.03.2016 / 14:07

4 respostas

4

Usando sed :

machex2=$(echo $machex1 | sed 's/\(..\)/:/g;s/:$//' )
    
por 14.03.2016 / 15:10
2

script bash :

machex2=${machex1:0:2}:${machex1:2:2}:${machex1:4:2}:${machex1:6:2}:${machex1:8:2}:${machex1:10:2}

Isso adicionará o ':' depois de dois caracteres hexadecimais.

    
por 14.03.2016 / 14:15
1

Usando bash , sed e gforth para remover os dois-pontos, subtraia 1 e restaure o dois pontos:

mac="C4:B9:83:7F:FF:AC"
gforth -e 'hex '${mac//:}' 1 - . cr' -e bye | sed 's/../&:/g;s/:.$//'

Saída:

C4:B9:83:7F:FF:AB
    
por 27.06.2016 / 21:03
0

Usando o POSIX Awk:

$ awk 'BEGIN{FS=OFS=":";$0=ARGV[1];$NF=sprintf("%X",("0x"$NF)-1);print}' C4:B9:83:7F:FF:AC
C4:B9:83:7F:FF:AB
    
por 27.03.2017 / 06:02

Tags