首页 > 解决方案 > 如果通过 bash 脚本包含主函数,则使用类名

问题描述

我正在编写脚本来grep包含多个类的java文件的类名,如果它包含主函数。示例:我的文件包含text.txt

class Parent 
{
    public void p1()
    {
        System.out.println("Parent method");
    }
}
public class Child extends Parent {

    public static void main(String[] args)
    {
        Child cobj = new Child();
        cobj.c1();   //method of Child class
        cobj.p1();   //method of Parent class
    }
  public void c1()
    {
        System.out.println("Child method");
    }
}  

输出将是:Child 因为它包含主要功能。我在文件中找到的模式 main 之前分析模式和 grep 两行。我的脚本:

grep  -B 2 "public static void main" "text.txt" > sample.txt
filen=$(grep -oP '(?<=class )[^ ]*' sample.txt)
echo $filen

但是如果代码包含以下内容,我的方法就会出错:

class Parent
{
    public void p1()
    {
        System.out.println("Parent method");
    }
}
public class Child extends Parent {
    public void c1()
    {
        System.out.println("Child method");
    }
    public static void main(String[] args)
    {
        Child cobj = new Child();
        cobj.c1();   //method of Child class
        cobj.p1();   //method of Parent class
    }
}

请帮助我找到正确的方法。

标签: awksed

解决方案


请您尝试关注一次。

 awk '/public static void main>/{print val} /public class/{val=$3}' Input_file

推荐阅读