仅使用 Perl 计算类似 grep 的正则表达式找到的数字总和

Calculate sum of numbers found by a grep-like regex using only Perl

我想通过只使用 Perl 来简化这个命令,现在它工作正常但是它很长而且垃圾邮件日志

perl -lane '$t+=$_ for @F; print $t' <<<$(ipset list -t | grep "Number of entries" | tr -d '\n')

基本上它需要对在该命令的输出中搜索特定字段的 grep 模式找到的数字求和

谢谢

ipset list -t
Name: xxxxxxxxxx
Type: hash:net
Revision: 7
Header: family inet hashsize 1048576 maxelem 1000000 bucketsize 12 initval 0xe63ffc5b
Size in memory: 1373520
References: 1
Number of entries: 28468

Name: xxxxxxxx
Type: hash:net
Revision: 7
Header: family inet6 hashsize 1048576 maxelem 1000000 bucketsize 12 initval 0x6d8601a2
Size in memory: 8444896
References: 1
Number of entries: 123695
perl -lwe '/Number of entries: (\d+)/ and $s +=  for `ipset list -t`;
           print $s || 0'
  • -lprint 添加换行符。如果你的 Perl 足够新,你可以使用 -Esay instead of print.
  • 在列表模式下调用反引号(for 强制)returns 单独的行。每行都与正则表达式匹配并提取数字。当匹配时,提取的数字将添加到 $s。总和打印在最后(如果没有要加和的则为零)。