使用grep查找功能

时间:2013-08-07 10:17:43

标签: linux unix grep

我需要找到system("rm filename")&等函数的用法。 system("rm -r filename")

我试过grep -r --include=*.{cc,h} "system" .& grep -r --include=*.{cc,h} "rm" .但他们给出的结果太多了。

如何搜索system("rm x")的所有实例,其中'x'可以是任何内容。与grep的新种类。

3 个答案:

答案 0 :(得分:1)

尝试:

grep -E "system\(\"rm [a-zA-Z0-9 ]*\"\)" file.txt

正则表达式[a-zA-Z0-9 ]grep x system("rm x")中需要查找的内容构建了grep模式。遗憾的是,{{1}}不支持用于匹配的组,因此您需要直接指定要搜索的内容。

答案 1 :(得分:1)

可能的方法是在GCC编译器内部工作。您可以使用MELT域特定语言。它提供了GCC内部表示的简单匹配。

它比文本解决方案更复杂,但它也可以找到例如在内联和其他优化之后调用函数内的system

因此,定制GCC编译器可能不值得为您的情况付出代价,除非您拥有非常大的代码库(例如数百万行源代码)。

在一个更简单的基于文本的方法中,你可以管道两个greps,例如

   grep -rwn system * | grep -w rm

或者只是

   grep -rn 'system.*rm' *
顺便说一句,在一些足够大的软件中,你可能会有很多代码,例如。

  char cmdbuf[128];
  snprintf (cmdbuf, sizeof(cmdbuf), "rm %s", somefilepath);
  system (cmdbuf);

并且在这种情况下,基于文本grep的简单方法是不够的(除非您直观地检查周围的代码)。

答案 2 :(得分:0)

安装ackhttp://beyondgrep.com),您的电话是:

ack --cc '\bsystem\(.+\brm\rb'