我需要在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
,如果是,则打印前一行和当前行