gerp(1):ファイルで指定した文字列を検索し、その行を印刷する


/** @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
"); exit(-1); } if((fp = fopen(argv[2], "r")) == NULL) { fprintf(stderr, "File open failed
"); exit(-1); } /*read one line from a file*/ while(!feof(fp)) { for(i=0; i<MAX-1 && (c = fgetc(fp)) != EOF && c != '
'; i++) { str[i] = c; } if(c == '
') str[i++] = '
'; str[i] = '\0'; //if(c == EOF) // break; if(strindex(str, argv[1]) >= 0) { printf("%s", str); found++; } } printf("total lines: %d
", 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; }