2

我有一个statistics -o -u i1,1,1返回的 linux 命令

max count[0]:=31
max count:=31

我想在我的 perl 脚本中取出数字 31。我可以从命令行使用 awk piped to head

statistics -o -u i1,1,1 | awk -F':=' '{print $2}' | head -n1

或类似地使用 grep

statistics -o -u i1,1,1 | grep -Po '(?<=max count:=)\d+'

或 sed...

我怎样才能在 perl 脚本中做类似的事情?


编辑本质上,我想用纯 perl 解决方案替换 perl 代码中的反引号系统调用。

4

1 回答 1

4

您可以模拟 awk:

perl -F":=" -lane 'print $F[1]'

或者您可以模拟 grep:

perl -nle 'print /(?<=max count:=)(\d+)/'

它们的工作方式不同,因为第一个将为包含:=后跟某些内容的任何行提供输出。

-n开关允许读取标准输入或文件,-l处理换行符并-F为 autosplit 设置分隔符-a

更新:

根据您的评论,您似乎想要用纯 perl 代码替换系统调用:

my $variable = `statistics -o -u i1,1,1 | grep -Po '(?<=max count:=)\d+'`;

statistics命令对我来说是未知的,所以我不知道替换它的纯 perl 方法,尽管 cpan 上可能存在某些东西。不过,您可以通过在 perl 中处理输出来节省一个进程。像这样的东西应该工作:

my @lines = grep /max count:=/, qx(statistics -o -u i1,1,1);
my ($num) = $lines[0] =~ /max count:=(\d+)/;

运算符的qx()工作方式与反引号完全相同,我只是将其用作个人喜好。

于 2013-04-04T11:45:21.223 回答