我有一堆java源文件,想要列出源中每个类实现的接口。
最好的情况是在一行中声明一个类
class MyClass implements MyInterfaceA, MyInterfaceB {
但是,有多行声明的行
class SomeClass
implements
InterfaceC,
InterfaceD
{
所以,基本上,如果我能有一个可以捕获第一个implements
字符串文字和第一个字符{
之间的所有内容的正则表达式,我就有了实现接口的名称。
在最后一个小时左右,我一直在修补像grep,pcregrep,sed和awk这样的工具,最后得到了一个似乎有用的命令。
pcregrep -M 'class[\s\S]*implements'
正如您所看到的,我正在尝试输出单词class
和implements
之间的所有内容,并且命令输出行
class SomeClass
implements
当我修改同一个表达式以输出implements
和{
之间的所有内容时,它输出的内容远远超出我的要求,可能是因为文件中有这么多{
和/或因为{
是一个特殊字符。
如何在此之后输出第一个implements
和第一个{
之间的文字?
答案 0 :(得分:1)
使用GNU grep :
示例input.java
文件:
class MyClass implements MyInterfaceA, MyInterfaceB {
}
class SomeClass
implements
InterfaceC,
InterfaceD
{
}
工作:
my_interfaces=$(grep -Poz '\bimplements[[:space:]]*\K[^{]*(?=\{)' input.java | tr -s '\n' ' ')
echo "$my_interfaces"
输出:
MyInterfaceA, MyInterfaceB InterfaceC, InterfaceD