使用多个 grep 查找
find with multiple greps
我需要在 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=[=10=]; next} f==1 && !/NULL/{f=0; print p; print [=10=]}'
解释:
/^---/ {next}
忽略 grep
生成的所有以破折号开头的行
/malloc/{f=1;p=[=13=];next}
设置标志 f
如果该行包含 malloc
然后记住 p
中的行并移动到下一个
f=1...
检查是否设置了标志(即上一行包含 malloc
)并且当前行不包含 NULL
,如果是,则打印上一行和当前行
我需要在 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=[=10=]; next} f==1 && !/NULL/{f=0; print p; print [=10=]}'
解释:
/^---/ {next}
忽略grep
生成的所有以破折号开头的行/malloc/{f=1;p=[=13=];next}
设置标志f
如果该行包含malloc
然后记住p
中的行并移动到下一个f=1...
检查是否设置了标志(即上一行包含malloc
)并且当前行不包含NULL
,如果是,则打印上一行和当前行