如何在Perl中转换MAC地址格式?

ycggw6v2  于 2022-11-15  发布在  Perl
关注(0)|答案(3)|浏览(136)

我必须编写一个Perl脚本,以HHHH.HHHH. HHHH格式获取MAC地址,其中“H”是一个十六进制数字,并给予HH:HH:HH:HH:HH:HH的输出。
下面是一个输入文本示例:

System Information
Local port          :xgei-1/6/1
Group MAC address   :Nearest Bridge
Neighbor index      :1
Chassis type        :MAC address
Chassis ID          :4cf5.5b8b.f860
Port ID type        :Interface name
Port ID             :XGigabitEthernet0/0/1
Time to live        :109
Port description    :ZTE-2-C650-172.24.102.77
System name         :main-link-lab-cdi-sw-01

下面是我处理MAC地址数据的脚本片段:

if ($linha =~m/^Chassis ID/){
            my($chassisID) = $linha=~ /:(.*)/g;
            $lldpInfo{$localInt}{"chassisID"} = $chassisID;
            print $chassisID."\n";  
}

在本例中,我必须处理变量$chassisID

o2rvlv0m

o2rvlv0m1#

您可以使用CPAN中的NetAddr::MAC模块以多种不同的方式解析和格式化MAC地址:

#!/usr/bin/env perl
use warnings;
use strict;
use feature qw/say/;
use NetAddr::MAC;

my $macaddr = '4cf5.5b8b.f860';
my $mac = NetAddr::MAC->new($macaddr);
say $mac->as_ieee; # 4c:f5:5b:8b:f8:60
tjvv9vkg

tjvv9vkg2#

一种快速而又不太实用的方法是在.上拆分字符串,将条目(假定每个条目4个字符)Map到由:分隔的2个字符片段中,然后使用:分隔符重新连接结果

my $chassisID = '4cf5.5b8b.f860';
# Transform the format:
$chassisID = join(':', map { substr($_, 0, 2).':'.substr($_, 2, 2) } split('\.', $chassisID));
print "ChassisID in MAC address format: $chassisID\n";

输出量:

ChassisID in MAC address format: 4c:f5:5b:8b:f8:60
q8l4jmvw

q8l4jmvw3#

my $out = join ":", unpack "(H2)*", pack "n*", map hex, split /\./, $in;

如果不能省略前导零,可以使用以下较短的解决方案:
第一次

相关问题