如何用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
工作原理
- 跟踪当前类:每当遇到类定义行(不管有没有
public修饰,也不管后面跟着extends/implements),就提取类名并保存到current_class变量里。正则表达式会跳过行首的空格,精准捕获class关键字后的类名(直到空格或左大括号为止)。 - 匹配main方法:当找到标准的main方法定义行(同样兼容不同的空格格式),就输出当前记录的类名——这时候的
current_class就是包含该main方法的类。
测试验证
用你给出的两个测试文件运行这个脚本,都会输出Child,完全符合预期。哪怕main方法放在类的最后、中间任意位置,都能正确关联到对应的类。
内容的提问来源于stack exchange,提问作者Ratnesh
相关产品推荐
相关产品推荐

