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

标签 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 正则表达式,但这并不像预期的那样有效。它在 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/

相关文章:

c# - 我的 Regex.Replace 不起作用

c - 如何在 C 中使用 malloc() 创建特定大小的数组?

c - long long int 值打印不正确

c++ - 哪个是整数除以 2 的更好选择?

perl - 如何在 Perl 中执行类似 SQL 的连接?

perl - 用perl初始化常量变量

perl - perl 脚本的无服务器执行?

c - 重新分配和内存移动

javascript - 将两个字符串组合在一起

Python 正则表达式 : using or statement