我正在尝试使用grep
来查找特定C函数的所有调用者。
例如:
void foo()
{
...
ret = my_bar()
}
对于my_bar()
的所有出现,我想打印调用my_bar()
的相应函数名称。
我尝试过(基于Regex (grep) for multi-line search needed)
grep -Pzo "(?s)^{\N*?.*?my_bar" *.c
使用Perl正则表达式,但这并不像预期的那样工作。它会在 foo()
之前的函数开始匹配,直到my_bar()
这可以用grep / perl和regex,还是我必须使用像cscope
这样的工具?
答案 0 :(得分:0)
Perl one-liner,记住最后一个函数,并在找到my_bar()
时打印其名称。这非常简单,如果它多次调用my_bar()
,它会多次打印一个函数,但你会得到基本的想法。
perl -ne '$fun = $_ if /^\w+ \w+\(.+\)$/; if (/my_bar\(\)/) { print "$fun" }' *.c
下面的变体应该涵盖具有多行参数列表和尾随注释的函数:
perl -ne '$fun = $_ if /^\w+ \w+\(.+$/; if (/my_bar\(\)/) { print "$fun" }' *.c