加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_池州站长网 (https://www.0566zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

Perl 仅在函数定义内搜索字符串

发布时间:2022-12-14 10:56:03 所属栏目:Unix 来源:
导读:  Perl 仅在函数定义内搜索字符串

  perlunixawksedgrep

  Perl 仅在函数定义内搜索字符串,perl,unix,awk,sed,grep,Perl,Unix,Awk,Sed,Grep,有没有办法只在函数定义中搜索字符串。我的意思是说,假设有
  Perl 仅在函数定义内搜索字符串
 
  perlunixawksedgrep
 
  Perl 仅在函数定义内搜索字符串,perl,unix,awk,sed,grep,Perl,Unix,Awk,Sed,Grep,有没有办法只在函数定义中搜索字符串。我的意思是说,假设有一个c程序文件a.c,其中存在多个函数的定义,但我只想在特定函数(比方说do_something())定义中存在该字符串时输出搜索,有没有办法从命令提示符中搜索类似的字符串?例如,对于以下代码:#include void f(int n,int j,int k){ printf("name is is pankaj "); printf("name
 
  有没有办法只在函数定义中搜索字符串。我的意思是说,假设有一个c程序文件a.cUNIX Shell函数,其中存在多个函数的定义,但我只想在特定函数(比方说do_something())定义中存在该字符串时输出搜索,有没有办法从命令提示符中搜索类似的字符串?
 
  例如,对于以下代码:
 
  #include
  void f(int n,
           int j,
           int k)
  {
     printf("name is is pankaj ");
     printf("name is is kumar ");
     printf("name is is mayank ");
  }
  int main()
  {
     printf("name is is pankaj ");
     return 0;
  }
  #包括
  空f(int n,
  int j,
  int(k)
  {
  printf(“名称为pankaj”);
  printf(“名称为kumar”);
  printf(“名称为mayank”);
  }
  int main()
  {
  printf(“名称为pankaj”);
  返回0;
  }
  对于上面的程序,我只希望函数f()中出现一个pankaj,我不希望pankaj作为搜索的输出出现在main函数中。请忽略程序中的任何语义或语法错误,我的查询仅用于在程序中搜索字符串。
 
  当然,请尝试以下操作:
 
  $0 ~ fun {
      count = 1
      while (! ($0 ~ /{/))
          getline
      getline
  }   
  count > 0 {
      if ($0 ~ /{/)
          count++
      if ($0 ~ /}/)
          count--
      if ($0 ~ query)
          print FILENAME ": l" FNR ". " $0
  }
  然后像这样调用脚本:
 
  awk -v query="pankaj" -v fun="void f[(]" -f script.awk inputfile.java
  其中,
 
  query
  是要搜索的字符串,
 
  fun
  是函数名的正则表达式
 
  此脚本统计
 
  {
  和
 
  }
  以查看我们何时离开函数,如果找到匹配项,则应打印该行
 
  编辑:您可能想扩展正则表达式以计算括号,也许需要额外检查它们是否放在注释中(尽管您从未这样做)。
 
  通过编码,您尝试过什么?我没有尝试过任何东西,只是好奇地想知道,如果我做grep“kumar”a.c,那么它将给出a.c中所有kumar的出现,有没有办法混合使用正则表达式,这样我就可以强制我的grep只查看函数定义的内部?我在给出的程序中尝试过它(刚刚编辑了Q),但它不起作用。对,忘记了多行函数。现在再试一次。还有一件事,如果有不止一个文件,比如inputfile1.java和inputfile2.java,那么下面的命令是否有效:awk-v query=“pankaj”-v fun=“void f[(]”-f script.awk inputfile1.java inputfile2.javaYes您可以,我将更新脚本以打印文件名。您还可以执行
 
  awk…script.awk*.java
  将其应用于当前目录中的所有java文件。您甚至可以在命令末尾添加更多文件。例如,
 
  。/*.java src/*.c
  lso搜索父目录中的所有java文件,甚至搜索名为src的目录中的c文件。我很高兴,如果您认为这是一个高质量的答案,您可以通过向上投票来感谢我。
 

(编辑:我爱制作网_池州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章