具有多个grep的c-find



我需要在malloc之后找到不包含单词null的代码行,这样我就可以了解malloc是否被正确检查了。

例如,应打印以下行:

obj = (boolean *) malloc(DAYS_IN_WEEK * sizeof(boolean));
for(int i = 0; i < DAYS_IN_WEEK; i++){

这个命令部分工作,因为它打印出包含malloc的行

find . -type f -name '*.c' ( -exec grep -HnA2 'malloc' {}  ;

我应该再加一个grep吗?不知道怎么做。

肯定有一些更容易的东西,但这似乎很接近:

find . -name "*.c" -exec grep -nHA1 malloc {} ; | 
awk '/^--/ {next} /malloc/{f=1; p=$0; next} f==1 && !/NULL/{f=0; print p; print $0}'

说明:

  • /^---/ {next}忽略grep生成的所有以短划线开头的行
  • 如果该行包含malloc,则/malloc/{f=1;p=$0;next}设置标志f,然后记住p中的该行并移动到下一行
  • f=1...检查是否设置了标志(即前一行包含malloc(,而当前行不包含NULL,如果是,则打印前一行和当前行