正则表达式详解​

 

正则表达式详解

一、概述

  GREP(global search regular expression(RE) and print out the
line),是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。利用这些返回值就可进行一些自动化的文本处理工作。

二、语法格式

  正则表达式: grep [option] …'pattern' file….

  扩展正则表达:grep -E 'PATTERN' file….

  fgrep :fast grep ,不支持使用正则表达式

  语法格式上扩展正则表达式仅是比正则表达式多了一个参数 –E;

三、元字符集

1、字符匹配:

    . : 匹配任意单个字符

    [ ]: 匹配指定范围内的任意单个字符

        [0-9] [[:digit:]]

        [a-z] [[:lower:]]

        [A-Z] [[:upper:]]

        [[:space:]] [[:punct:]] [[:alpha:]]

    [^]:取反

2、次数匹配:用于实现指定其前面的字符所能够出现的次数

     *:任意长度,用于能够匹配他前面的字符可以出现任意次

    \?:0次或1次,他前面的字符可有可无的

    \{m\}:m次,他前面的字符出现m次

    \{m,n}: 至少m次,至多n次

    \{m,\}:至少m次

    \{0,n\}:至多n次

    .*:任意长度的任意字符,工作于贪婪模式:尽可能的去匹配

3、位置锚定

    行首锚定:^ :要写在模式最左侧

     行尾锚定:$: 写在模式最右侧

     ^$ : 空白行 实例: grep "^$" /etc/issue | wc – l

    不包含特殊字符的连续字符组成的串叫单词

         \<:词首,出现在单词左侧

        \<char

        \>:词尾, 出现于单词右侧

        \>char

        \b:词首词尾都行

4、分组模式

    \(\):分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用;

        实例:grep "\(ro\)\{1,\}" /etc/passwd 至少出现一次

    引用:有编号:自左而右的左括号,以及与其匹配的右括号;从内向外;

        \#:引用第n个括号所匹配到的内容,而非模式本身

四、命令选项

     -v:反向选取; 如: grep –v "^$" /etc/issue

    -o:仅显示匹配到的字串,而非字串所在的行 grep "r..t" /etc/passwd -o

    -i : ignore-case :忽略字符大小写 Cat , cat grep -i "cat"

    -E:支持使用扩展正则表达式

    -A #: 被匹配到后面的#行 — grep -A 1 "r..t" /etc/passwd    

    -B #: 前面

    -C #:前后各一行

五、正则表达式和扩展正则表达式的字符集区别

    1、字符匹配基本一致

    2、次数匹配

        *:任意次

        ?: 0或1次

        +:至少1次

        {m}:精确匹配m次

        {m , n}: m到n次

        {m,} :至少m次

        {0,n}:最多n次

    3、锚定基本一致

    4、分组

        ()

         引用: \1,\2,\3

        或者:

         a |b :a或者b

        conC|cat : conC或者cat

        con(C|c)at : conCat或者concat

六、实例解析

    1、显示/proc/meminfo文件中以大写或小写S开头的行

        1.png

    2、显示/etc/passwd中其默认shell为/bin/bash的用户

        2.png

    3、显示/boot/grub/grub.conf中以至少一个空白字符开头的行

        3.png

    4、添加用户,bash,testbash,basher,nologin(修改此shell为nologin)而后找出当前系统上其用户名和默认shell相同的用户

        4.png                此题值得好好思考一番;

    5、扩展题目:

         新建一个文本文件,

                 He like his lover.

                 He love his lover.

                 He like his liker.

                 He love his liker.

         找出其中最后一个单词是由此前某单词加r构成的行

        5.png

    6、找出ifconfig命令结果中1-255之间的数字

        6.png

    7、挑战题:写一个模式,能匹配合理的ipv4地址

        7.png

        8.png

 

原创文章,作者:wxdz_2004(古雨秋),如若转载,请注明出处:http://www.178linux.com/4078

(0)
wxdz_2004(古雨秋)wxdz_2004(古雨秋)
上一篇 2015-05-11
下一篇 2015-05-11

相关推荐

  • 用户组管理系列(二):权限设置

    1、权限简介    操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在Linux中权限一般分为读(readable)、写(writable)和执行(excutable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可…

    Linux干货 2016-08-05
  • sed的模式匹配用法探讨

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1405753 [root@sunsky Desktop]# cat sunsky a b c d e f [root@sunsk…

    Linux干货 2016-08-15
  • linux流程控制if,for,case,while

     Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for、while和until。while循环和for循环属于“当型循环”,而until属于“直到型循环”。循环控制符:break和continue控制流程转向。 选择执行:           …

    Linux干货 2017-03-25
  • 终端的类型

    Linux下的终端是一个连接系统的接口,它有以下几个分类     tty:虚拟终端       tty是Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由Teletype公司生产的。   &nbsp…

    Linux干货 2016-10-20
  • 手动创建挂载交换分区

    SWAP分区 SWAP [root@cloud ~]# fdisk /dev/sdb Command (m for help): d Selected partition 1 Command (m for help): w The…

    Linux干货 2016-06-09