有没有办法只在函数定义中搜索字符串。
我的意思是说假设有一个ac程序文件ac,其中有几个函数的定义存在,但我只想在特定函数内部的那个字符串(让我们说do_something())定义时才输出搜索,有什么方法从命令提示符搜索这样的字符串?
例如,对于以下代码:
#include <stdio.h>
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()中出现一次pankaj,我不希望pankaj作为搜索的输出出现在main函数中。 请忽略程序中的任何语义或语法错误,我的查询仅用于在程序中搜索字符串。
答案 0 :(得分:0)
当然,试试这个:
$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
是函数名的正则表达式。
此脚本会计算{
和}
以查看我们何时离开该功能,如果找到匹配则应打印该行。
编辑:您可能希望扩展正则表达式以计算括号,可能需要额外检查以查看它们是否未放入注释中(尽管您从未这样做过)。