您的位置:首页 > 运维架构 > Linux

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

2012-07-29 09:40 302 查看
/** @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 MAX		100

int 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 file
if(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 similar
return i;
}
return -1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐