You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash+Perl逐行统计每行的正则匹配次数?

逐行统计每行匹配次数的Perl实现

问题背景

需要在Bash环境下用Perl逐行统计文件中每行的匹配次数(以示例文件中的.为例)。

示例文件 ~/test.txt 内容:

one.two.three.four
one.two.three.four
one.two.three.four
one.two.three.four

原命令(统计全文件匹配总数):

perl -0777snE 'my @count = /\./gm; say scalar @count' -- ~/test.txt

原命令返回结果:

12

期望输出(逐行统计结果):

3
3
3
3

解决方案

原命令中 -0777 参数会让Perl将整个文件读取为单个字符串,因此统计的是全局匹配总数。要实现逐行统计,只需移除该参数,让Perl默认逐行处理输入,再对每行单独计算匹配次数。

简洁版命令

perl -nE 'say scalar(() = /\./g)' -- ~/test.txt

直观版命令

perl -nE 'my @matches = /\./g; say scalar @matches' -- ~/test.txt

命令说明

  • -n:让Perl自动循环读取输入的每一行,对每行执行一次代码块,无需手动编写循环逻辑。
  • /\./g:在当前行中全局匹配所有.,返回所有匹配结果的列表。
  • scalar(() = /\./g):利用Perl的列表上下文特性,将匹配结果赋值给空列表时,会返回匹配的数量,再通过scalar转为标量输出。

内容的提问来源于stack exchange,提问作者Mario Palumbo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:53:14