實現grep命令
阿新 • • 發佈:2017-09-24
count int stdlib.h gets [0 mat cnblogs 搜索 att
#include <stdio.h> #include <string.h> #include <stdlib.h> // grep命令:grep match_pattern file_name // 在file_name中搜索包含match_pattern的行 // ./a.out math math // 在math中搜索math所在的行 int main(int argc, char *argv[]) { FILE *fp = NULL; char buf[128], tmp[128]; char *p = NULL; int count = 0; char *s = NULL; fp = fopen(argv[2], "r"); if (NULL == fp) { perror("fopen"); return -1; } //fgets:從文件中每次讀取一行數據入buf 失敗或者讀到結尾返回NULL //file中的每行第buffsize個字符賦‘\0‘ while (fgets(buf, sizeof(buf)-1, fp) != NULL) { //統計行 count++; if ((p = strstr(buf, argv[1])) != NULL) { printf("%d :", count); } //打印匹配的字符窗 s = buf; //p指向argv[1]第一次出現在s中的地址 while((p = strstr(s, argv[1])) != NULL) { #if 1 bzero(tmp, sizeof(tmp)); memset(tmp, 0, sizeof(tmp)); //表示清空空間 strncpy(tmp, s, p - s); //拷貝數據到臨時空間中 #else snprintf(tmp, p - s + 1, "%s", s); #endif printf("%s", tmp); printf("\033[31m%s\033[0m", argv[1]); s = p + strlen(argv[1]); } if (s != buf) printf("%s", s); /*sleep(1);*/ } fclose(fp); return 0; }
實現grep命令