我必须创建一个Perl脚本,它以HHHH.HHHH.HHHH格式获得一个MAC地址,其中"H“是一个十六进制数字,并给我一个HH:HH的输出。如何在Perl中进行此转换?
下面是一个输入文本示例:
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。
发布于 2022-07-05 18:23:33
一种快速而肮脏的方法可以是拆分.上的字符串,将条目(假设每个字符为4个字符)映射到由:分隔的两个字符段中,然后用:分隔符重新加入结果。
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发布于 2022-07-05 18:33:55
您可以使用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发布于 2022-07-05 20:07:33
my $out = join ":", unpack "(H2)*", pack "n*", map hex, split /\./, $in;如果不能省略前导零,可以使用以下较短的解决方案:
my $out = $in =~ s/\.//rg =~ s/..\K/:/rg;s/\.//g, s/..\K/:/g for $s; # In-placehttps://stackoverflow.com/questions/72873835
复制相似问题