开心每一天

Happy every day

MAC地址的有效格式(基于mac地址的vlan配置WiFiMAC填写)

业务的需求

MAC 地址是络设备(如卡)的标识符,通常由六组十六进制数字表示,每组包含两个字节。不同厂商的 MAC 地址格式可能不同,例如:”14:98:77:6d:49:79″、”0057AF051EFF” 等。

下面请将 MAC 地址从一种格式转换为另一种格式:0057AF051EFF 变为 00:57:AF:05:1E:FF

使用 for 循环和 sed 命令

ot@VM-2-15-ubuntu:~# a=0057AF051EFF
ot@VM-2-15-ubuntu:~# for ((i=0; i<${#a}; i=i+2 ));do echo  ${a:$i:2} ;done |  sed  ':a;N;$!ba;s#\n#:#g'
00:57:AF:05:1E:FF

用 for 循环遍历 a中的字符,并使用 echo 命令输出每两个字符,后通过 sed 命令将输出结果中的换行符 “\n” 替换为冒 “:”。

使用 read、for 循环和 sed 命令

ot@VM-2-15-ubuntu:~# echo 0057AF051EFF | { read;for((i=0;i<${#REP};i=i+2));do echo "${REP:$i:2}";done |sed  ':a;N;$!ba;s#\n#:#g'; };
00:57:AF:05:1E:FF

总体思想如上,通过read 少了一个自定义变量的操作。

read REPLAY 三元表达

ot@VM-2-15-ubuntu:~# echo 0057AF051EFF | { read;for((i=0;i<${#REP};i=i+2));do  (( $i >= ${#REP}-2 )) && echo -n "${REP:$i:2}" || echo -n "${REP:$i:2}:" ;done; echo;};
00:57:AF:05:1E:FF
    1. echo 0057AF051EFF:输出 MAC 地址.2. read:读取输入的 MAC 地址,并将其保存在变量 REP 中.3. for((i=0;i<${#REP};i=i+2)):通过循环遍历 REP 变量中的每两个字符4. (( $i >= ${#REP}-2 )) && echo -n “${REP:$i:2}” || echo -n “${REP:$i:2}:”:对于每两个字符,判断是否是 REP 变量中的后两个字符,如果是,则输出这两个字符,否则输出这两个字符后面加上一个冒。5. echo;:在结束循环后输出一个换行符,使输出结果更加整齐。

使用 awk 命令

ot@VM-2-15-ubuntu:~# echo 0057AF051EFF |  awk 'BEGIN{FS=""}{for(a=1;a<NF+1;a=a+2)pntf("%s", a==NF-1 ? $a$(a+1)"\n" : $a$(a+1)":")}'
00:57:AF:05:1E:FF

这条命令使用 awk 命令将每两个字符之间入破折,并在末尾添加换行符,得到结果。

使用 sed 命令

ot@VM-2-15-ubuntu:~# echo 0057AF051EFF|sed -r 's/(..)/&:/g;s#:$##'
00:57:AF:05:1E:FF

这条命令使用 sed 命令将每两个字符之间入冒,然后删除末尾的冒,得到结果 .

使用Python方式

In [1]: import re
In [2]: s = '0057AF051EFF'
In [3]: ':'.join((r'.{2}', s))
Out[3]: '00:57:AF:05:1E:FF'
In [4]: ':'.join([s[i:i+2] for i in range(0, len(s), 2)])
Out[4]: '00:57:AF:05:1E:FF'

以上文档包含了多种在 Linux 命令行环境下进行 MAC 地址格式转换的方法,涵盖了不同的技术和语言,包括 tr、sed、awk、Python 等。这些方法通过不同的方式实现了将无分隔符的 MAC 地址转换为带有冒分隔符的格式,使得 MAC 地址更加易读和易于识别。