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

如何用Bash脚本提取包含main方法的Java类名?

提取Java文件中包含main方法的类名

你的思路问题在于依赖grep -B2固定行数来关联类定义和main方法,这在类结构变化时很容易失效——毕竟main方法完全可以放在类里的任意位置。下面给你一个更健壮的Bash方案,用awk来处理多行文本,精准跟踪当前所在的类:

解决方案脚本

awk '/^[[:space:]]*(public[[:space:]]+)?class[[:space:]]/ {
    # 匹配类定义行,提取类名(兼容带public、继承/实现的情况)
    if (match($0, /(public[[:space:]]+)?class[[:space:]]+([^[:space:]{]+)/, arr)) {
        current_class = arr[2]
    }
}
/^[[:space:]]*public[[:space:]]+static[[:space:]]+void[[:space:]]+main[[:space:]]*\(/ {
    # 匹配main方法定义行,输出当前跟踪的类名
    print current_class
}' text.txt

工作原理

  1. 跟踪当前类:每当遇到类定义行(不管有没有public修饰,也不管后面跟着extends/implements),就提取类名并保存到current_class变量里。正则表达式会跳过行首的空格,精准捕获class关键字后的类名(直到空格或左大括号为止)。
  2. 匹配main方法:当找到标准的main方法定义行(同样兼容不同的空格格式),就输出当前记录的类名——这时候的current_class就是包含该main方法的类。

测试验证

用你给出的两个测试文件运行这个脚本,都会输出Child,完全符合预期。哪怕main方法放在类的最后、中间任意位置,都能正确关联到对应的类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:27:38