Perl 如何从shell命令的输出中提取数字?

Perl 如何从shell命令的输出中提取数字?,perl,Perl,命令的输出是ent3,我希望从该输出中3存储在变量中 Perl代码 整理代码 使用regex,类似这样的功能应该可以工作: if($result =~ /([0-9]+)/) { $num = $1; } print $num; 您在此处执行工作的代码是: my $num = $result =~ /([0-9]+)/; 让我们把它放到一个简单的程序中,这样我们就可以看到发生了什么 #!/usr/bin/perl use strict; use warnings; use feat

命令的输出是
ent3
,我希望从该输出中
3
存储在变量中

Perl代码 整理代码
使用regex,类似这样的功能应该可以工作:

if($result =~ /([0-9]+)/) {
    $num = $1;
}
print $num;

您在此处执行工作的代码是:

my $num = $result =~ /([0-9]+)/;
让我们把它放到一个简单的程序中,这样我们就可以看到发生了什么

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

my $result = 'ext3';

my $num = $result =~ /([0-9]+)/;

say $num;
然后打印
1
。这不是我们想要的。发生什么事了

如果您阅读match操作符的文档(在“perlop”一节中),您将看到操作符在不同情况下返回的内容。它说:

在字符串中搜索模式匹配,在标量上下文中,如果成功则返回true,如果失败则返回false

这就解释了我们看到的行为。“1”只是表示匹配成功的真实值。但我们如何获得括号中的值呢。有两种方法。首先,它被写入
$1
变量中

my $num;

if ($result =~ /([0-9]+)/) {
  $num = $1;
}

say $num;
但我认为另一种方法是你一直在寻找的。如果继续阅读,您将看到运算符在列表上下文中返回的内容:

列表上下文中的
m/
返回由模式中括号匹配的子表达式组成的列表,即(
$1
$2
$3
…)

因此,如果我们将匹配运算符放在列表上下文中,那么我们将返回
$1
的内容。我们如何将匹配放入列表上下文中?通过将表达式设置为列表赋值-我们可以通过在赋值的左侧放置括号来实现

my ($num) = $result =~ /([0-9]+)/;

say $num;

你试过什么?你有什么问题?嗨。您是否有可能重新格式化代码-删除行号(如果是行号的话)、修复缩进等?此命令-lsdev | grep en | grep VLAN | awk'{print\$1}应该生成ent3,它正在这样做。之后,我希望ent3中的数字3存储在一个变量中。但我不能这样做。要么这是一个匿名子例程(这似乎对问基本正则表达式问题的人来说很有野心),要么你为了我们的利益重新键入了代码,并在过程中犯了一些错误。我刚刚开始,对perl不太熟悉,所以如果有人能提供帮助,请这样做
my $num;

if ($result =~ /([0-9]+)/) {
  $num = $1;
}

say $num;
my ($num) = $result =~ /([0-9]+)/;

say $num;