我正在尝试使用 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 正则表达式,但这并不像预期的那样有效。它在 before foo()
函数开始匹配,直到 my_bar()
这可以用 grep/perl 和 regex 实现吗,还是我必须使用像 cscope
这样的工具?
最佳答案
一个 Perl 单行代码,它会记住最后一个函数,并在找到 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
关于c - 使用正则表达式匹配调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18822207/