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

相关推荐

  • centos7或centos6中如何编译安装源码程序包

    yum仓库配置、程序的编译安装

    2017-12-02
  • LVS介绍

    LVS介绍     LVS是linux virtual server的简写,是服务器集群的一种负载均衡解决方案,作为netfilter的补充套件,工作于内核空间。     常见的术语 CIP:客户端ip地址 RIP:后端服务器ip地址 VIP:lvs面向客户端的ip地址 DIP:lvs面向…

    Linux干货 2017-08-04
  • Homework Week-2 Linux文件管理

    1、Linux上的文件管理命令都有哪些,其常用的使用方法及其相关示例演示。 文件管理工具:cp, mv, rm         cp命令:copy  源文件  目标文件                单源复制:cp [O…

    Linux干货 2016-08-22
  • 一键搭建mysql集群系列二

    mysql 5.7  主从复制 本节是在上一节的基础之上做的操作,上节我们通过脚本实现了一键自动化安装mysql5.7,这次我们要在三台机器上部署msyql5.7,并实现主从复制,实现的宗旨是,能自动化,就尽量自动化,实在不能自动化,那就手工化 用的脚本和文件说明1.install_mysql.sh 自动化安装mysql脚本2.ntpdate.sh 时间同步…

    2017-05-21
  • 进程管理

    简述进程的相关理论与工具使用

    2017-09-09
  • 关于 建立私有CA和申请证书

                               建立私有CA和申请证书            …

    系统运维 2016-09-23

评论列表(1条)

  • renjin
    renjin 2017-04-12 13:20

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