0

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

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

我如何搜索system("rm x")“x”可以是任何东西的所有实例。grep 有点新。

4

3 回答 3

1

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

它比文本解决方案更复杂,但它也会发现例如system在内联和其他优化后对内部函数的调用。

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

在更简单的基于文本的方法中,您可以通过管道传输两个 grep,例如

   grep -rwn system * | grep -w rm

或者也许只是

   grep -rn 'system.*rm' *

顺便说一句,在一些足够大的软件中,您可能有很多代码,例如

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

在这种情况下,简单的基于文本grep的方法是不够的(除非您从视觉上检查周围的代码)。

于 2013-08-07T11:00:38.853 回答
1

尝试:

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

Regexp[a-zA-Z0-9 ]grep它需要xsystem("rm x"). 不幸的是,grep不支持匹配组,因此您需要直接指定要搜索的内容。

于 2013-08-07T10:53:41.483 回答
0

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

ack --cc '\bsystem\(.+\brm\rb'
于 2013-08-07T13:11:26.157 回答