1. 程式人生 > >實現grep命令

實現grep命令

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命令