#!/usr/bin/perl
$macaddress = "000000000000";
print "$macaddress\n"; # Now how to make it 00:00:00:00:00:00
如何使之成为00:00:00:00:00:00?
#!/usr/bin/perl
$macaddress = "000000000000";
print "$macaddress\n"; # Now how to make it 00:00:00:00:00:00
如何使之成为00:00:00:00:00:00?
这将做到这一点:
print join (":", $macaddress =~ m/(\d{2})/g);
我们使用的 “两位数” 正则表达式匹配。我们重复它,所以匹配返回每个两位数的元素列表。然后它在:
。
不过,如果你正在处理十六进制数字,这是行不通的 - 你需要处理的信件,以及:
my $macaddress = "c0ffeedeAD02";
print join (":", lc($macaddress) =~ m/([0-9a-f]{2})/gi);
,它将打印:
c0:ff:ee:de:ad:02
(中lc
降低一切)。
注 - 此技术匹配任意成对数字,并忽略其他任何内容。所以你可以很乐意做到这一点:
$macaddress = "c0-ff-ee-de-AD-02";
$macaddress = "c0:ff:ee:de:AD:02";
$macaddress = "c0XffJee*de&AD!02";
它加入一个指定的分隔符。您可以使用另一个(或无):
$macaddress = "c0XffJee*de&AD!02";
print join ("", lc($macaddress) =~ m/([0-9a-f]{2})/gi);
#still prints: c0ffeedead02
谢谢,它完美的作品。 –
如何在00:00:00:00:00:00删除冒号? –
'@addr = split(':',$ str);打印@addr;'将删除冒号。 – serenesat
另一种选择是代替做
my $macaddress = "000000000000";
$macaddress =~ s/(?<=\d{2})(\d{2})/:$1/g;
print $macaddress;
如果要分开两个任意字符使用
~s/(?<=..)(..)/:$1/g;
谢谢你@glenn jackman :)
为了避免必须砍:'$ macaddress =〜s /(?<=..)(..)/:$ 1/g' –
@glennjackman谢谢你的有用的评论文章编辑:) – mkHun
你也可以使用substr:
for (my $pos = 2; $pos < length $macaddress; $pos += 3) {
substr $macaddress, $pos, 0, ':';
}
不要以root身份编码。 – zb226
为什么?如果im代码在root模式下会发生什么? –
要解释[这个答案](http://askubuntu.com/a/16179):你可以打破东西糟糕。 – zb226