用于在文件中查找函数并打印其内容的命令

时间:2014-04-03 00:28:26

标签: regex linux awk grep sh

我正在寻找一个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 }之间打印所有内容,即使在最外面的花括号中有花括号。

1 个答案:

答案 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