何为正则表达式?

何为正则表达式

 

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
下一篇 2016-08-16

相关推荐

  • 7.11 centos 7安装重点之磁盘分区+SecureCRT 8.0安装步骤

    一:Centos安装重点之磁盘分区   0.前言      0.1  常见的磁盘接口有两种,IDE与SATA接口,目前主流的为SATA接口      0.2  关于主分区、扩展分区、逻辑分区的特性           ①…

    2017-07-11
  • 什么叫Linux

    什么叫linux:     Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。 谁编写的linux: Linux的出现,最早…

    Linux干货 2017-03-27
  • DHCP

        动态主机设置协议(Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途: 用于内部网络或网络服务供应商自动分配IP地址给用户 用于内部网络管理员作为对所有电脑作中央管理的手段     …

    Linux干货 2017-07-24
  • Linux的哲学思想

    Linux的哲学思想 linux有个哲学的思想是一切皆文件 其中linux硬件设备也是通过文件来表示的 物理终端 物理终端指的是显示器等硬件终端设备,文件存在于 /dev/console 这个路径下 虚拟终端 虚拟终端指的是在linux命令行连接的终端,文件存在于 /dev/tty# [1,6] 这个路径下 串行终端 指的是使用计算机串行端口连接的终端设备,…

    Linux干货 2018-02-23
  • Net25-第13周作业

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名; 3)添加samba用户gentoo,centos和u…

    Linux干货 2017-05-15
  • Sqlserver2012(主从复制)共享同步日志备份恢复

    SQL Server 2012相对于SQL Server 2008来说,无论是性能还是功能都有一个相当大的提高,甚至可以用“革命”来形容这一次升级。SQL Server 2012使 SQL Server 跻身于企业级数据库行列。在数据高可用性方面,SQL Se…

    Linux干货 2015-10-31