我将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命令的结果会在正则表达式中被检查,因为它被放入数组中?
答案 0 :(得分:4)
my @nums_post = map { /(\d+)/ } `cmd | cmd | cmd`;
答案 1 :(得分:2)
由于您已经在shell上执行命令管道,因此可以在该管道中再添加一个grep
my @nums_post = `cmd | cmd | cmd | grep -o '[0-9]+'`