正则表达式详解​

 

正则表达式详解

一、概述

  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)
上一篇 2015-05-11 11:57
下一篇 2015-05-11 12:01

相关推荐

  • 从Linux小白到大牛——与狼共舞的日子9

    马哥教育网络班21期+第9周课程练习 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; [root@localhost ~]# cat shell.sh  #!/bin/bash # declare…

    Linux干货 2016-12-05
  • 马哥教育网络班22期+第八周课程练习

    1. 请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:工作在OSI模型的数据链路层,将两个局域网连起来,根据MAC地址来转发帧。它可以有效地连接两个LAN,使本地通信限制在本网段内,并转发相应的信号至另一网段,网桥通常用于连接数量不多的、同一类型的网段,它可以扩展网络的距离或范围,而且可提高网络的性能、可靠性和安全…

    Linux干货 2016-12-19
  • 快速搭建SVN服务器

    一、背景介绍 svn服务器是一款上传代码的工具(貌似这么说不怎么严谨,但是在日常工作中基本上是这么用的),今天一个小伙伴折腾了一天也没有搭建好这个svn服务器。各种问题,其实搭建SVN服务器最重要的就是三个配置文件(svnserver.conf、 passwd 、authz)。出了问题的话十有八九是这三个配置文件的问题。最后,我自己搭建了一个,测试成功。于是…

    Linux干货 2016-12-11
  • 磁盘分区管理

    进行磁盘分区之前首先要了解什么是磁盘分区:         磁盘分区是在磁盘上划分几个逻辑部分,盘片一旦划分成数个分区,不同类的目录与文件可以存储进不同的分区。越多分区,也就有更多不同的地方,可以将文件的性质区分得更细,按照更为细分的性质,存储在不同的地方以管理文件;但太多分区就…

    2017-08-21
  • 用户和组相关配置文件

    用户和组的配置文件都在/etc目录下          /etc/passwd;        内容格式:用户名;加密后密码影子(1#);UID;GID;注释;家目录,默认shell    …

    Linux干货 2016-10-23
  • 马哥教育21期网络班—第12周课程+练习—-LAMP练习下

    在LAMP架构中,请分别以fpm工作为独立守护进程的方式来支持http yum groupinstall "Development Tools" "Server Platform Development"——>安装包组1、编译安装Apacheht…

    Linux干货 2016-09-26