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

如何修改sed命令适配Java9+ 按类库统计加载的Java类数量

问题原因

你写的命令有3个核心问题:

  • Mac自带的是BSD版本sed,扩展正则的参数是-E而非GNU sed的-r,参数错误会导致正则解析异常
  • grep '[class,load]'的写法是字符组匹配,会匹配任意单个c/l/a/s/,/o/a/d字符,而非匹配完整的[class,load]标签
  • 原正则的捕获规则逻辑错误,没有正确匹配类名前的命名空间部分

修改后的完整命令

java -cp my.jar -verbose:class Handler | grep '\[class,load\]' | grep '\.jar' | sed -E 's/.*\[class,load\] ([^A-Z]*)[A-Z].*/\1/' | sed 's/\.$//' | sort | uniq -c | sort

逻辑说明

  1. 第一个grep '\[class,load\]'准确过滤类加载日志行
  2. 第二个grep '\.jar'仅保留从jar包加载的类
  3. 第一段sed命令捕获[class,load]后到类名首字母大写前的所有内容
  4. 第二段sed命令删除捕获内容末尾多余的点(比如java.io.Serializable捕获后会得到java.io.,去掉末尾点得到java.io)
  5. 后续的排序、统计逻辑和原Java8版本一致

测试验证

对Java9+的样例日志行[0.041s][info][class,load] java.io.Serializable source: jrt:/java.base,执行上述sed逻辑后输出结果为java.io,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:09:03