实现grep命令

#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;
}
时间: 2024-08-29 23:19:15

实现grep命令的相关文章

Linux &nbsp; &nbsp; grep命令,正则表达式

grep命令及正则表达式 grep命令 grep , egrep , fgrep grep,sed,awk 文本处理三剑客 grep: Global search REgular expression and Print out the line;全面查找正则表达式并将匹配到的行显示出来; 正则表达式 正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用;许多程序设计语言都支持利用正则表达式进行字符串操作; 主流的正则引擎又分为三类:DFA;传统型NFA;POSIX NFA; DFA

正则表达式和grep命令的用法

正则表达式和grep命令的用法: 一.正则表达式: 正则表达式(也称为regular Expression,简称RE)就是由普通字符(例如字符a到z)以及特殊字符(称之为元字符)组成的文字模式. 该模式描述在查找文字主体时待匹配的一个或多个字符串. 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.简单的说,正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表示通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程序.vim.gr

【转】每天一个linux命令(39):grep 命令

原文网址:http://www.cnblogs.com/peida/archive/2012/12/17/2821195.html Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板.如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名.搜索的

find 命令和grep命令的区别

对于find命令和grep命令两者之间的区别,大家可以这样记忆. find命令是用来查找文件的,而grep查找的是文件内容. 另外,find是完全匹配(通配符),而grep是包含匹配(正则表达式)

shell --- grep 命令详解

一.grep  ---- "行过滤工具" grep ( global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 )是一种强大的文本搜索工具,它能使用正则表达式搜索文本,查找包含某些字符串的行或符合某个模式(Pattern)的一类字符串的行,并把匹配的行打印出来.   grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则

grep命令

1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 2.格式 grep [options] 用到的四个文件名: file1:  hello world file2:  hello Jim file3:  hello lucy file4:  192.0.1222.45     192.1.45     19

grep命令学习

1.grep命令简介     grep命令是Linux系统中非常强大的文本搜索工具,全名Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户.根据某种模式(Pattern)搜索文本,并将符合模式的文本行显示出来.其中模式:由文本字符和正则表达式的元字符组合而成的匹配条件. 2.命令格式 grep [options] PATTERN [FILE...] options选项: -i 忽略模式的大小写 --color 用颜色标记 -v  反向查

shell脚本编程中的grep命令

grep命令语法 grep命令使用一个选项.一个要匹配的模式和要搜索的文件,它的语法如下所示: grep  [options]  PATTERN  [FILES] 如果没有提供文件名,则grep命令将搜索标准输入. options 选项 含义 -c   输出匹配行的数目,而不是输出匹配的行 -E   启用扩展表达式 -h   取消每个输出行的普通前缀,即匹配查询模式的文件名 -i   忽略大小写 -l   只列出包含匹配行的文件名,而不输出真正的匹配行 -v   对匹配模式取反,即搜索不匹配行而

grep命令最常用的功能总结

1. grep最简单的使用方法,匹配一个词:grep word filename 2. 可以从多个文件中匹配:grep word filename1 filenam2 filename3 3. 可以使用正则表达式匹配:grep -E pattern f1 f2 f3... 4. 可以使用-o只打印匹配的字符,如下所示: [email protected]:command$ echo this is a line. | grep -E -o "[a-z]*\." line. 5. 打印除

grep命令和curl命令的使用方法

今天看了汪海写的python爬虫教程,说实话看不懂...于是就用bash下的工具自己开始写了一个抓取糗事百科的糗事的脚本,期间搜索到了grep和curl命令的一些使用技巧. grep命令,使用grep命令来进行文本的通配,一般只是显示匹配的行,但是使用以下几个参数就可以显示上下文了: -C [num] #显示匹配行的上下各num行 -A [num] #显示匹配行的后num行 -B [num] #显示匹配行的前num行 curl这个下载工具,或者已经算不上是下载工具了,因为curl过于强大了,主要