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

如何将grep匹配的类实例结果按类名分组统计为PHP数组

按类名分组统计前端组件中CSS类的使用次数(PHP+Shell实现)

问题场景

在PHP中通过exec调用grep命令统计前端组件文件里指定CSS类的使用次数,当前执行的命令为:

\exec("grep -orE '" . $classesBarred . "' ../../front/src/components | sort | uniq -c", $allClassesCount);

其中$classesBarred是多类名匹配串(如search-unfocused|bg-app|enlarged-window),但返回结果包含文件路径,无法直接按类名分组,需要转换成[{search-unfocused:90}, {bg-app:45}]这类格式的数组。

优化后的Shell命令

借助awk简化处理流程,直接提取类名并统计,命令如下:

grep -orE "$classesBarred" ../../front/src/components | awk -F: '{print $NF}' | sort | uniq -c | awk '{print $2 "::" $1}'

命令各部分作用:

  • grep -orE "$classesBarred" ../../front/src/components:递归搜索目标目录,输出文件路径:类名格式的匹配结果
  • awk -F: '{print $NF}':以冒号为分隔符,提取每行最后一段(即类名)
  • sort | uniq -c:对类名排序后去重,统计每个类名的出现次数
  • awk '{print $2 "::" $1}':将统计结果转为类名::次数的格式,方便PHP解析

PHP解析并生成目标数组

将Shell命令的输出读取后,解析成需求格式的数组:

$classesBarred = 'search-unfocused|bg-app|enlarged-window';
// 拼接Shell命令,注意转义$符号
$cmd = "grep -orE '$classesBarred' ../../front/src/components | awk -F: '{print \$NF}' | sort | uniq -c | awk '{print \$2 \"::\" \$1}'";
exec($cmd, $output);

$result = [];
foreach ($output as $line) {
    list($className, $count) = explode('::', $line);
    $result[] = [trim($className) => (int)trim($count)];
}

// 如需JSON格式,直接编码即可
echo json_encode($result);

执行后会得到类似[{"search-unfocused":90},{"bg-app":45},{"enlarged-window":23}]的结果,完全符合需求。

内容的提问来源于stack exchange,提问作者Magor Menessy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:15:29