0

我将 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 只有我想要的数字。

有没有一种方法可以一步完成,一个数组?因此,在将bacticked 命令的结果放入数组时,它会根据正则表达式进行检查吗?

4

2 回答 2

4
my @nums_post = map { /(\d+)/ } `cmd | cmd | cmd`;
于 2013-11-11T07:17:34.103 回答
2

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

my @nums_post = `cmd | cmd | cmd | grep -o '[0-9]+'`
于 2013-11-11T07:27:02.607 回答