
私のMacアドレスは
'C4:B9:83:7F:FF:AC'
ありますC4B9837FFFAC
16進値から1を引いて次のようにしたいと思います。C4B9837FFFAB
その後、再びコロンを追加してコロン形式にしたいと思います。
C4:B9:83:7F:FF:AB
最初の2つのステップを実行するいくつかの解決策が見つかりました。
#!/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}
これにより、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