我需要找到system("rm filename")
&等函数的用法。 system("rm -r filename")
。
我试过grep -r --include=*.{cc,h} "system" .
& grep -r --include=*.{cc,h} "rm" .
但他们给出的结果太多了。
如何搜索system("rm x")
的所有实例,其中'x'可以是任何内容。与grep的新种类。
答案 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)
安装ack
(http://beyondgrep.com),您的电话是:
ack --cc '\bsystem\(.+\brm\rb'