쉘 스크립트 - 16진수 mac 주소에서 1을 빼고 콜론을 추가합니다.

쉘 스크립트 - 16진수 mac 주소에서 1을 빼고 콜론을 추가합니다.
  1. 내 맥 주소는 'C4:B9:83:7F:FF:AC'이고

  2. C4B9837FFFAC16진수 값에서 1을 빼서 다음이 되도록 하고 싶습니다.C4B9837FFFAB

  3. 그 후에 다시 콜론을 추가하여 콜론 형식으로 만들고 싶습니다.C4:B9:83:7F:FF:AB

처음 두 단계를 수행하는 몇 가지 솔루션을 찾았습니다.

#!/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" 

이것은 출력됩니다C4B9837FFFAB

이를 달성하기 위해 콜론을 어떻게 추가할 수 있습니까 C4:B9:83:7F:FF:AB?

다른 방법이 있나요?

답변1

사용 sed:

machex2=$(echo $machex1 | sed 's/\(..\)/\1:/g;s/:$//' )

답변2

세게 때리다쉘 스크립트:

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

그러면 두 개의 16진수 문자 뒤에 ':'이 추가됩니다.

답변3

를 사용 bash하고 콜론을 제거하고 1을 뺀 다음 콜론을 복원합니다 sed.gforth

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

산출:

C4:B9:83:7F:FF:AB

답변4

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

관련 정보