zoukankan      html  css  js  c++  java
  • [Shell]grep命令

    我是好文章的搬运工,原文来自ChinaUnix,博主scq2099yt,地址:http://blog.chinaunix.net/uid-22312037-id-4217835.html

    一、基本用法
            grep是linux中很常用的一个命令,主要功能就是进行字符串数据的对比,能使用正则表达式搜索文本,并将符合用户需求的字符串打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep在数据中查找出一个字符串时,是以整行为单位来进行数据选取的。
    1、命令格式
            grep [cinvs] 'patten' filename
    2、主要参数
            -c:只输出匹配行的计数。
            -i:不区分大小写(只适用于单字符)。
            -n:显示匹配行及行号。
            -s:不显示不存在或无匹配文本的错误信息。
            -v:显示不包含匹配文本的所有行。

        --o: 只显示正则匹配的文本
    3、patten
            要搜索的关键字或正则表达式语句,正则表达式参见后文。

    4、简单实例
            #netstat -nap|grep 80
            上面命令查询监听80端口的行。
            #grep -n "world" hello.txt
            查询文件hello.txt中含有"world"字符串的行,并显示行号。
            #grep -n "printf" main.c hello.c world.c
             在源码文件main.c、hello.c和world.c中查询调用了printf函数的行,并显示行号。
            #grep -n "printf" *
            在当前目录的所有文件中查询调用了printf函数的行,并显示行号。也可以指定路径,比如:/usr/local/include/*。
            #grep -r "printf" *
            在当前目录及所有子目录下递归查找调用了printf函数的行,并显示行号。
           
    二、正则用法
            grep patten正则表达式主要元字符及使用如下表:

    元字符

    功能

    例子

    匹配什么

    ^

    锚定行的开始

    /^love/

    匹配所有以love开头的行

    $

    锚定行的结束

    /love$/

    匹配所有以love 结束的行

    .

    匹配一个字符

    /l..e/

    匹配这样的行,这些行包含这样的字符:第一个字符是l,紧跟着两个字符,然后是e

    *

    代表0个或多个先前字符

    /*love/

    匹配所有这样的行,有0个或多个空格,空格后跟着love

    []

    匹配字符组中的一个字符

    /[Ll]ove/

    匹配所有包含love或者Love的行

    [^]

    匹配一个不在范围内的字符

    /[^A-Z]ove/

     

    <

    锚定单词的开始

    <love

    匹配所有这样的行,这些行包含以love开头的单词(vigrep支持这个功能)

    >

    锚定单词的结束

    Love>

    匹配所有这样的行,这些行包含以love结束的单词(vigrep支持这个功能)

    (..)

    标记后面用到的匹配字符

    /(love)able1rs/

    最多可以使用9个标签。第一个标签是模板最左边的部分。在本例子中,模板love保存的标签为1,后面的1指得就是love;本例子搜索的是这样的行,这些行包含这样的字符,在Loveabel后面跟着lovers

    x{m}

    M次复制字符x

       

    x{m,}

    至少m次复制字符x

       

    x{m,n}

    至少m次,至多n次复制字x

       

    w

    文字和数字字符,[A-Za-z0-9]

    Lw*e

    匹配一个L字符,紧跟着0个或多个文字或数字字符,然后是e

    W

    同上

       

    b

    单词分界线

    bloveb

    仅仅匹配单词love

            简单实例如下:
            #ls -l | grep '^a'
            通过管道过滤ls -l输出的内容,只显示以a开头的行。
            #grep 'test' d*
            显示所有以d开头的文件中包含test的行。
            #grep '[a-z]{5}' aa
            显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
            #grep 'w(es)t.*1' aa
            如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成'w(es)t.*1'就可以了。

    三、其它家族
            grep家族除了有grep命令外,还包括egrep和fgrep。
            egrep是grep的扩展,支持更多的正则元字符,具体如下:

    +

    匹配一个或者多个先前字符

    [a-z]+ove

    匹配一个或者多个小写字符且后面是ove的,

    ?

    匹配0个或者多个先前字符

    Lo?ve

    匹配L后面有一个或者没有o,然后是ve

    a|b|c

    匹配abc

    Love|hate

    匹配lovehate其中一个

    ()

    字符组

    Love(able|rs)(ov)+

    匹配loveablelovers,匹配一个或多个ov

    (…)(…)12

    标记匹配字符串

    (love)ing

    标签标记出寄存器的一部分,并稍后替换模板。该模板叫做1,并可反复引用。在表达式中最多可以使用9个这样的标签。例如,模板love被保存在寄存器1中并稍后替换标签叫做1

    x{m}

    重复字符X,m次,至少m,或者m次和n次之间。

       

    x{m,}

         

    x{m,n}

         

            fgrep是fixed grep或fast grep,它把所有的字母都看作单词,即正则元字符不再特殊,而仅仅表示其自身的字母意思。

  • 相关阅读:
    Redis-安装
    Redis-介绍
    Redis 教程(转)
    C# Redis 帮助类
    sublime text3---Emmet:HTML/CSS代码快速编写神器
    Sublime Text3 Package Control和Emmet插件安装方法
    vs2010音频文件压缩 调用lame_enc.dll将WAV格式转换成MP3
    vs学习过程中遇见的各种问题
    vs2010中添加dll文件
    解决angular11打包报错Type 'Event' is missing the following properties from type 'any[]': ...Type 'Event' is not assignable to type 'string'
  • 原文地址:https://www.cnblogs.com/panweishadow/p/3703729.html
Copyright © 2011-2022 走看看