如何从数组的每个元素中提取特定的substr?

时间:2013-09-03 11:38:08

标签: perl

my @input = ("2001::2               62     00:00:00:00:00:00 incmp  1/1 vlan-id 100 ");

从包含上述字符串的数组中,我想在62的位置提取值,并希望将其存储到新数组中。怎么做?

3 个答案:

答案 0 :(得分:1)

假设您的数组最终将包含多个值:

my @new_array = map { (split)[1] } @input;

拆分空格上的每一行,并将第二个元素映射到一个新数组。

答案 1 :(得分:1)

split ' '在空格上拆分字符串,( EXPR )[1]返回EXPR返回的第二个标量。

my $input = "2001::2               62     00:...";
my $second = ( split ' ', $input )[1];

您已经澄清过要从数组的每个元素中提取该字段,所以

my @seconds = map { ( split )[1] } @inputs;

的缩写
my @seconds = map { ( split ' ', $_, 0 )[1] } @inputs;

答案 2 :(得分:0)

我认为你不想要grep,因为据我所知你无法捕获一个组(在你的情况下你想要捕获62)。

我会使用一个简单的正则表达式:

#!/usr/bin/perl
use warnings;
use strict; 

my @input = ("2001::2 62 00:00:00:00:00:00 incmp 1/1 vlan-id 100 ");

my @foo;
foreach (@input) {
    chomp;
    my (@match) = ($_ =~ /\d+\s+(\d+)\s+/);
    push @foo, @match;
}

foreach (@foo){
    print "$_\n";
}

输出:

62

当你使用数组时,我想你会有多个匹配。以上内容将匹配与测试示例位于同一位置的每个数字,并将它们推送到新数组 - @foo ...