gerp(1):查找文件中指定的字符串,并打印该行

来源:互联网 发布:数据库迷糊查询 编辑:程序博客网 时间:2024/06/05 19:26
/** @autho: yj    *  @function: like gerp command in linux: find lines with a specified string in a file, and print these lines. *  @usage: ./grep [string] [filename] **/#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX100int strindex(char s[], char t[]);int main(int argc, char *argv[]){int i;char c;FILE *fp;int found = 0;char str[MAX]; // keep a line read from a fileif(argc < 3) {fprintf(stderr, "Not enough arguments\n");exit(-1);}if((fp = fopen(argv[2], "r")) == NULL) {fprintf(stderr, "File open failed\n");exit(-1);}/*read one line from a file*/while(!feof(fp)) {for(i=0; i<MAX-1 && (c = fgetc(fp)) != EOF && c != '\n'; i++){str[i] = c;}if(c == '\n')str[i++] = '\n';str[i] = '\0';//if(c == EOF)//break;if(strindex(str, argv[1]) >= 0) {printf("%s", str);found++;}}printf("total lines: %d\n", found);return found;}/*find position of string t[], and return position; if not exist, return -1 */int strindex(char s[], char t[]){int i, j, k;for(i=0; s[i] != '\0'; i++) {for(j=i, k=0; t[k]!='\0' && s[j]==t[k]; j++, k++);if(k > 0 && t[k] == '\0') //t[k] = '\0' means completely similarreturn i;}return -1;}


原创粉丝点击