我正在寻找一个grep,sed或awk命令,它将递归搜索文件中的函数名称,如果函数名称匹配,则打印该函数的内容。
int function_name(){
//Body
for(int i = 0; i < 3; ++i){
//this too
}
//with this
}
我希望能够使用终端命令,如果我不知道什么文件function_name()is in I can search for
function_name()`并且它将打印出来
//Body
for(int i = 0; i < 3; ++i){
//this too
}
//with this
我现在使用的是那种作品grep -r -A 100 "function_name()" *
,但在找到该函数后总是显示100行。问题是有些功能小于100,它显示了我不需要的东西,有些大于100行被切断。
我对正则表达式并不太熟悉,但我希望它能在花括号{ Print This }
之间打印所有内容,即使在最外面的花括号中有花括号。
答案 0 :(得分:0)
正如我在评论中所说,标准UNIX工具中提供的正则表达式无法匹配大括号。当你考虑字符串中的括号,评论......时,事情变得更加丑陋......
这是使用缩进匹配的可能解决方案。如果您将其另存为findfunc.awk
:
BEGIN {
printing = 0;
indent = "";
}
{
if (printing) {
if ($0 ~ ("^"indent"}$")) {
printing = 0;
} else {
print;
}
} else if ($0 ~ ("^[^(]*"name"\\(.*\\)\\s*{$")) {
indent = gensub(/^(\s*).*$/, "\\1", $0);
printing = 1;
}
}
你可以像这样调用它:
awk -f findfunc.awk name=function_name source.c