正则表达式详解​

 

正则表达式详解

一、概述

  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

相关推荐

  • Linux硬链接和软链接

    标签:    inode    软链接    硬链接 一、ionde及inode编号   在计算机中,信息一般以扇区(sectors)的形式存储在硬盘上,而每个扇区包括512个字节的数据和一些其他信息(即一个扇区包括两个主要部分:存储数据地点的标识符和存储数据的数据段)。操作系统…

    Linux干货 2016-10-20
  • 用户和组相关配置文件

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

    Linux干货 2016-10-23
  • bash的基础特性

    1、Bash的命令补全      使用tab键可以实现命令补全或者路径补全 2、Bash的命令行展开      使用~,可以展开为用户的家目录;             例如#cd ~ 表示切换目录到当前用户家目录中   &nbs…

    Linux干货 2016-11-02
  • 网络基础总结

    这周南老师出差了,由王老师给我们代课,这周我们主要学习了网络基础,相比着之前,主要是理论加理解。下面我总结一下。 处于21世纪的我们,互联网时代,网络在我们身边的各个角落,覆盖了我们的衣食住行,带来 很多方便;首先什么是网络, 家庭办公室,移动用户,总部,分支机构。。。都在用互联网相连着,省去了许多麻烦,时间,加快了办公效率; 资源共享的功能和优点:数据和应…

    2017-09-02
  • Linux RPM 命令参数使用详解

    rpm 执行安装包: 二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由 RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。 -ivh # 安装显示安装进度–install–verbose–hash。 使用方法如下:   &n…

    2017-04-18