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

相关推荐

  • 2016-10-17作业

    1 生产环境发现一台服务器系统时间产生偏差,造成服务异常,请帮忙校正。 答:hwclock -s 2 生产有一个数据同步脚本需要执行很长时间,怎样做到无人值守,在管理工具退出的情况下,脚本依然能正常运行。 答:screen -S work  进去后开始做工作,暂时离开时可使用 ctrl+a,d 剥离当前会话。 3 Linux系统中命令共分为内建命令…

    Linux干货 2016-10-18
  • Java构造时成员初始化的陷阱

    让我们先来看两个类:Base和Derived类。注意其中的whenAmISet成员变量,和方法preProcess() public class Base {     Base() {         preP…

    Linux干货 2015-04-03
  • ifcfg家族命令介绍

    ifcfg家族命令: ifconfig ifconfig [interface] add<地址>:设置网络设备IPv6的ip地址; del<地址>:删除网络设备IPv6的IP地址; down:关闭指定的网络设备;<硬件地址>:设置网络设备的类型与硬件地址; io_addr:设置网络设备的I/O地址; irq:设置…

    Linux干货 2016-07-29
  • 编程能力与编程年龄

    程序员这个职业究竟可以干多少年,在中国这片神奇的土地上,很多人都说只能干到30岁,然后就需要转型,就像《程序员技术练级攻略》这篇文章很多人回复到这种玩法会玩死人的一样。我在很多面试中,问到应聘者未来的规划都能听到好些应聘都说程序员是个青春饭。因为,大多数程序员都认为,编程这个事只能干到30岁,最多35岁吧。每每我听到这样的言论,都让我感到相当的无语,大家都希…

    Linux干货 2016-08-15
  • 2018第六届中国网络安全大会即将于6月强势登陆!

    2018年6月13日,由赛可达实验室、国家计算机病毒应急处理中心、国家网络与信息系统安全产品质量监督检验中心、首都创新大联盟共同举办的第六届中国网络安全大会(NSC 2018)将在北京国家会议中心盛大召开。

    2018-03-15
  • N22-妙手-第七周博客作业第四题:RAID各级别的特性

    什么是RAID RAID的全称是Redundant Array of Independent Disks – 独立磁盘冗余阵列。基本思想是将多个相对便宜的硬盘组合成为一个硬盘阵列,使其在性能上达到或超过一块价格昂贵、容量巨大的硬盘。RAID通常被用在服务器上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统会把其当做一块硬盘。RAID分为不同的等…

    Linux干货 2016-09-27

评论列表(1条)

  • renjin
    renjin 2017-04-12 13:20

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