假设我有一个包含许多模块的文件夹,并且我正在为一个函数执行 grep
。假设我正在搜索的函数称为 test()
。是否可以找出调用了哪些函数test()
?例如,假设下面是 ModuleA.erl
,我们为 test()
做一个 grep。
FunctionA()
A = 5,
B = 3,
test()
它应该返回:
ModuleA.erl: FunctionA()
可以安全地假设函数定义将始终是非缩进的
最佳答案
您可以为此使用 awk
:
$ awk -v patt="test" '$0 ~ /^\w/ {f=$0} $0 ~ patt {print f}' file
FunctionA()
说明
这存储不以空格开头的行。如果一行匹配,则打印最后存储的行。
-v patt="test"
提供模式$0 ~/^\w/{f=$0}
如果当前行以某个字符(不是空格)开始,则存储它的值。$0 ~ patt {print f}
如果一行包含给定的模式,则打印存储的标题。
测试
$ cat a
FunctionA()
A = 5,
B = 3,
test()
FunctionB()
A = 5,
B = 3,
another()
$ awk -v patt="test" '$0 ~ /^\w/ {f=$0} $0 ~ patt {print f}' a
FunctionA()
关于regex - Grep:查找调用函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28028819/