Я пишу сценарий, который grep имя класса Java-файла, содержащего несколько классов, если он содержит функцию main.
Пример: мой файл содержит 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
, поскольку он содержит основную функцию. Я анализирую шаблон и 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
}
}
Пожалуйста, помогите мне найти правильный подход.