我需要找到system("rm filename")
&之类的函数的用法system("rm -r filename")
。
我试过了grep -r --include=*.{cc,h} "system" .
,grep -r --include=*.{cc,h} "rm" .
但他们给出了太多的结果。
我如何搜索system("rm x")
“x”可以是任何东西的所有实例。grep 有点新。
一种可能的方法可能是在 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
的方法是不够的(除非您从视觉上检查周围的代码)。
尝试:
grep -E "system\(\"rm [a-zA-Z0-9 ]*\"\)" file.txt
Regexp[a-zA-Z0-9 ]
为grep
它需要x
在system("rm x")
. 不幸的是,grep
不支持匹配组,因此您需要直接指定要搜索的内容。
安装ack
(http://beyondgrep.com),您的电话是:
ack --cc '\bsystem\(.+\brm\rb'