检查正则表达式反对从bacticks返回到数组

时间:2013-11-11 07:15:53

标签: regex arrays perl

我将unix命令的结果放入像这样的数组

@nums_pre = `cmd | cmd | cmd`;

数组@nums_pre现在看起来像这样

$VAR = [
         '1234/some_cmd',
         '4321/some_cmd',
         '1122/some_cmd',
         '3344/some_cmd',
        ];

我只想要数字,所以我做了这个

my @nums_post;
foreach my $val (@nums_pre) {
    if ($val =~ /(\d+)/) {
        push @ports_post, $1;
    }
}

现在新的数组@nums_post只有我想要的数字。

有一种方法可以一步完成,只有一个阵列吗?因此,bactick ed命令的结果会在正则表达式中被检查,因为它被放入数组中?

2 个答案:

答案 0 :(得分:4)

my @nums_post = map { /(\d+)/ } `cmd | cmd | cmd`;

答案 1 :(得分:2)

由于您已经在shell上执行命令管道,因此可以在该管道中再添加一个grep

my @nums_post = `cmd | cmd | cmd | grep -o '[0-9]+'`