我有一个返回
的linux命令statistics -o -u i1,1,1
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脚本中执行类似操作?
EDIT 基本上,我想用纯perl解决方案替换perl代码中的反引号系统调用。
答案 0 :(得分: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()
运算符与反引号完全相同,我只是将其用作个人偏好。