使用正则表达式匹配调用函数

时间:2013-09-16 07:08:34

标签: c regex perl grep

我正在尝试使用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这样的工具?

1 个答案:

答案 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