何为正则表达式?

何为正则表达式

 

UNIX/Linux上有许多文本处理工具,其中最主要最重要要属grepsed、和awk三种了,被称为文本处理三剑客。但是要完全认识他们的各种功能,则必须现在正则表达式及其元字符的使用上打好基础。

什么是正则表达式?正则表达式(regular expressionRE)是一种字符模式,用于在查找过程中匹配指定的字符。正则表达式的有趣之处在于可以用特殊的元字符来控制他们,以实现强大的匹配功能。

正则表达式元字符

元字符是这样一类字符,他们表达的不是字面本身的含义,而是代表其它的特定的含义,以此来进行模式匹配界定。

元字符有两类:shell元字符和正则表达式元字符。

Shell元字符由shell来解析。例如,当用户输入命令“rm *”时,命令中的星号“*”就是一个shell元字符,称为通配符。Shell将其解析为匹配当前工作目录下的所有文件名

正则表达式的元字符则是由各种执行模式匹配的程序来解析,譬如vigrepsed、和awk。可以用元字符来定位在行首行尾出现的单词,也可以用元字符指定任意字符或某一组字符,从而对其执行查找及增删替换等操作。例如,下面的这条sed命令: 

何为正则表达式? 

表示把行首hello单词替换成大写的Hello。拖字符”^”代表在行首,”\>”表示单词的结束。

        有5种基本的元字符可以被UNIX/Linux的所有模式匹配工具识别。表1-1列出了可以在所有版本的viexgrepegrepsedawk中使用的元字符,其他的则可能适用于部分工具中。

何为正则表达式? 

                   表1-1  正则表达式元字符

何为正则表达式?

                                         表 1-2

下面我们将举例来讲解每个元字符,假定在如下文字中查找。Grep命令能查找被模式匹配到的行并显示整行内容

何为正则表达式? 

基本正则表达式元字符

1行首定位符”^”

何为正则表达式? 

拖字符^查找行首开头的为love的行 

2行尾定位符”$

何为正则表达式?

美元$为行尾定位符,此行中day位于行尾,后面紧跟换行符。 

3任意单个字符”.”

何为正则表达式? 

句号(.)匹配除换行符的任意单个字符

4零个或多个前字符”*”

何为正则表达式? 

星号(*)匹配零个或多个前字符,它就像和前面的字符粘在一起一样,只控制这个字符.匹配次数包括0,如上例中的lv

5匹配一组字符的任意一个”[]”

何为正则表达式? 

6一个范围中的一个字符”[ – ]”

何为正则表达式? 

方括号中的连字符匹配某一范围中的一个字符,上例中匹配li后接一个a-z的任意字符,由于匹配的是ASCII值的范围,所以不能写成[z-a]

7不在组内的字符”[^ ]”

何为正则表达式? 

方括号内的拖字符是一个否定元字符。上例中匹配ove后加一个不是azAZ,且不是0-9的字符,那就可能是空格,标符号如?了

以上为正则表达式的基本元字符,他们可以组合起来成为更复杂的表达式。

其他表达式元字符

下面的元字符不一定适用于所有使用正则表达式的工具,但可用于vivim编辑器,及某些版本的sedgrep。此外还有一种被egrepawk所使用的扩张正则表达式。

1词首定位符\<和词尾定位符\>

何为正则表达式? 

上例中查找每一行的单词love.单词的存在形式可以是:以空格开头、由标点终结、开始于行首、结束语行尾等,所以字母和数字都是可以属于单词的。

2”\( …\)”记录模式

何为正则表达式? 

上例中第一个被”\(\)”记录的标记为\1,第二个被”\(\)”记录的标记为\2,以此类推。如果把他们互相替换,则标签所代表的被记录的内容也会交换位置。

3模式的重复”\{m,n\}”,表示其前面的字符最少重复m次,最多重复n次。

何为正则表达式? 

 

原创文章,作者:beyond,如若转载,请注明出处:http://www.178linux.com/36216

(1)
beyondbeyond
上一篇 2016-08-16 13:59
下一篇 2016-08-16 13:59

相关推荐

  • 马哥教育网络班19期+第7周课程练习

    1.创建一个10G分区,并格式为ext4文件系统:   (1)要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl;   (2)挂载至/data/mydata目录,要求挂载时禁止程序自行运行,且不更新文件的访问时间戳;   fdisk /dev/sdb    part…

    Linux干货 2016-06-22
  • Linux基础

    计算机组成和功能 按照Von Neumann的理解 [1],计算机分为以下几部分:     输入 (Input Device, 用于提供给计算机待处理的数据)         e.g. 键盘,…    &nbs…

    Linux干货 2016-09-27
  • linux分区管理工具—fdisk

    一、关于为什么要分区       (1)为了数据的安全:当文件系统只有一个分区时,如果遇到分区需要格式化的情况,则硬盘里的数据无法保留,而如果提前对硬盘做了分区那么就可以很好地额解决这个问题;       (2)为了提升效率:硬盘(这里单指机械硬盘)分为外圈和…

    Linux干货 2016-03-12
  • ansible配置与应用

    无法上传图片 一、程序主要文件: ansible ansible-playbook ansible-doc 二、程序发布: 要求: 1.不能影响用户体验 2.系统不能停机 3.不能导致系统故障或造成系统完全不可用。 发布路径: /webapps/tuangou /webapps/tuangou-1.1 /webapps/tuangou-1.2. 在调度器上下…

    Linux干货 2016-11-14
  • 脚本练习

      1、写一个脚本,使用ping命令探测10.1.8.1-10.1.8.10之间所有主机的在线状态,在线的主机使用绿色显示,不在线的主机使用红色显示。     #!/bin/bash     #Test host whether onlin…

    Linux干货 2016-12-18
  • 我的第一篇博客

    Hello,大家好,以后我也是博客中的一员了,希望能和大家共同进步。

    Linux干货 2017-07-11