grep命令与正则表达式

grep命令与正则表达式 
什么是grep: 
        grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep支持扩展正则表达式的grep,fgrep快速搜索,不支持正则表达式。 
grep命令: 
    –color:相当于auto,对匹配到的文本进行着色显示 
    -v:显示不被pattern匹配到的行(取反,找出不包含“pattern”的行) 
    -i: 忽略字符大小写 
    -n:显示匹配到的行号 
    -c:显示统计匹配到的行数,等同于wc -l 
    -o:仅显示匹配到的字符串 
    -q:静默模式,不输出任何信息 
    -A # :after ,后#行 (#:数字) 
    -B # :before ,前#行 
    -C # :context, 前后各#行 
    -e :实现多个选项间的逻辑or关系 
    -w:匹配整个单词 
    -E:相当于egrep,支持扩展的正则表达式 
    -F: 相当于fgrep,不支持正则表达式 
正则表达式 
        概念:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 
     目的:

  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。 
    特点:
  3. 灵活性、逻辑性和功能性非常的强;
  4. 可以迅速地用极简单的方式达到字符串的复杂控制。

对于刚接触的人来说,比较晦涩难懂。 
正则表达式引擎 
        正则引擎主要可以分为两大类:一种是DFA,一种是NFA。 
DFA 引擎在线性时状态下执行,因为它们不要求回溯(并因此它们永远不测试相同的字符两次)。DFA 引擎还可以确保匹配最长的可能的字符串。但是,因为 DFA 引擎只包含有限的状态,所以它不能匹配具有反向引用的模式;并且因为它不构造显示扩展,所以它不可以捕获子表达式。 
传统的 NFA 引擎运行所谓的“贪婪的”匹配回溯算法,以指定顺序测试正则表达式的所有可能的扩展并接受第一个匹配项。因为传统的 NFA 构造正则表达式的特定扩展以获得成功的匹配,所以它可以捕获子表达式匹配和匹配的反向引用。但是,因为传统的 NFA 回溯,所以它可以访问完全相同的状态多次(如果通过不同的路径到达该状态)。因此,在最坏情况下,它的执行速度可能非常慢。因为传统的 NFA 接受它找到的第一个匹配,所以它还可能会导致其他(可能更长)匹配未被发现。 
元字符分类:字符匹配、匹配次数、位置锚定、分组 
字符匹配: 
        常用选项: 
.         :匹配任意单个字符 
            [abc]:a|b|c 
            [^abc]:除abc之外的字符 
            [:alnum:]:字母和数字 
            [:alpha:]:英文大小写字符 a-z A-Z 
            [:lower:]:小写字母 
            [:upper:]:大写字母 
            [:space:]:专门匹配空格 
        不常用选项: 
            [:cntrl:]:不可打印的控制字符(退格、删除、警铃……) 
            [:digit:]:十进制数字 
            [:xdight:]:十六进制数字 
            [:graph:]:可打印的非空白字符 
            [:print:]:可打印字符 
            [:punct:]:标点符号 
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数 
        * : 匹配前面的字符任意次,0到无穷 
        .*:任意字符出现任意次,比如说 123 456 abc 
        a*:a字符出现任意次 aaaa aa 
        [[:lower:]]*:任意小写字母出现任意次 
        \? :匹配前面的字符出现0次或1次 
            例:a\? 出现0次或1次 
        \+:匹配前面的字符至少1次 
            例:a+ a至少出现1次 
        \{n\}:前面的字符出现n次 
            例:[0-9]\[3\] 000-999 
        \{m,n\}:匹配前面的字符出现m到n次,m、n是一个范围 
        \[,n\]:匹配前面的字符最多出现n 
            例:[0-9]\{,3\}最大匹配是999 
        \{m,\}:匹配前的字符至少出现m次 
            [0-9]\{3,\} 000 无穷 
位置锚定:用来定位字符出现的位置 
        ^ : 锚定行首 
        $: 锚定行尾 
        ^$ :匹配空行的 
        ^[[:space:]] :行首是空白的字符 
        ^[[:space:]]*$:也是空行 
        ^a:以a开头的行 
        b$:以b结尾的行 
        ^a.*b$:以a开头,中间任意字符,以b结尾 
        ^a.*[[:space:]]\{3\}.*b$:以a开头跟任意字符,中间出现三次空格在跟任意字符以b结尾的行 
        ^#:以#开头的行

        \b \b :匹配词首和词尾 

        \< >:匹配次首和词尾 
            \broot \b = \<root \> 
分组:将匹配规则分成不同的组 使用1 2 3 … 等数字去标示,便于后面使用同样规则的时候可以直接引用 
        \| : 或 
            例:a \| b a或b 
扩展正则表达式 
        . :单个字符 
        [ ]:中括号范围内的字符 
        *:匹配前面字符的任意次 
        ?:0或者1次 
        +:1次或者多次 
        {m}:匹配m次 
        {m,n}:至少m次 至多n次 
        |:或者 a|b a或者b 
        ^:行首 
        $:行尾锚定 
        \<,\b:语首 
        \>,\b:语尾 
        ( ):分组 向后引用 \1 \2

原创文章,作者:木,如若转载,请注明出处:http://www.178linux.com/72810

(0)
木
上一篇 2017-04-08 17:22
下一篇 2017-04-08 18:23

相关推荐

  • 学习笔记–权限管理

    文件系统的权限管理 1、Linux系统下每个目录或文件的权限对象主要分为:属主(u)、属组(g)、其他用户(o),针对每类访问对象都定义了三种权限:读(r)、写(w)、执行(x),这三种权限针对目录和文件的作用各不相同,以下将做详细说明: 对于文件来说: 读(r)权限:可以使用文本查看类工具读取文件内容 写(w)权限:可以修改文件内容,但不能删除文件本身 执…

    Linux干货 2016-08-05
  • 马哥教育网络班21期+第4周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel /home/ && mv /home/skel&nbsp…

    Linux干货 2016-08-02
  • SElinux 管理

    SELinux: Secure Enhanced Linux(安全强化的linux) SElinux安全上下文是由五个元素组成的: ①User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程 ②Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:syste…

    Linux干货 2016-09-26
  • 关于ip_conntrack跟踪连接满导致网络丢包问题的分析

    http://ixdba.blog.51cto.com/2895551/1737642

    Linux干货 2016-06-03
  • rsyslog同步history日志

    前言   由于公司业务是由公司内部开人员及外包团队共同开发,所以需要使用rsyslog对history日志做收集、审计。虽然搭建及配置非常简单,但是在日常运维工作中很实用,所以记录下,方便日后快速搭建。如果有错误,望大神指正。 syslog简介 syslog是Linux系统默认的日志守护进程。默认的syslog配置文件是/etc/sysl…

    Linux干货 2015-04-03
  • Linux文件类型及颜色标识

    文件类型(共7种): – :普通文件 d:目录文件 (directory) c:字符设备文件 (char) b:块设备文件 (block) s:本地域套接口 (socket) p:有名管道 (pipeline) l:符号连接 (link) 关于硬链接、软连接、复制之间的区别说明: 上图中,我为photo.png这个图片文件建立了一个拷贝(phot…

    Linux干货 2016-10-16

评论列表(1条)

  • renjin
    renjin 2017-04-12 13:20

    详细介绍了grep命令与正则表达式的使用,内容写的非常详细,但需要注意一下排版的问题,也可以适当的加入图片