何为正则表达式?

何为正则表达式

 

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

相关推荐

  • cut命令练习总结

    cut命令的作用是实现文本内容的切割,原内容或者原文件不受影响。   cut小练习:                       2016年 07月 …

    Linux干货 2016-07-22
  • 循环结构

    循环结构 循环执行:     讲一段代码重复执行一次或多次          进入条件:条件满足时进入循环     退出条件:每一个循环都应该有退出条件,以有机会退出循环;   &…

    Linux干货 2016-08-21
  • 计算机组成及各部分功能

    计算机组成及各部分功能 计算机组成 区别于利用机械原理对数据进行处理的机械计算机,计算机现在一般都指电子计算机,即电脑。计算机是一种利用电子学原理,根据一些列指令对数据进行处理的工具。 不管是机械计算机还是电子计算机其主要目的还是代替人来完成一系列的数据计算。1941年夏天诞生的阿塔纳索夫-贝瑞计算机是世界上第一部电子计算机,使用了真空管计算器,二进制数值,…

    Linux干货 2016-10-27
  • lvs 基本概念

    LVS(linux virtual machine) 的简写,是一个虚拟的服务器集群系统,主要用于4层负载均衡。 宗旨: 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器. 很好的可伸缩性(Scalability) 很好的可靠性(Reliability),应该还是高可用吧 很好的可管理性(Manageability…

    Linux干货 2015-09-14
  • select循环解析

    前言:   select命令用于创建菜单,在select循环执行时会根据list数组给出选择菜单,用户选择后的结果保存在变量中,然后给出菜单,等待用户选择。select是个死循环,如果用户用户想跳出选择循环,需要在循环体中根据条件增加break语句。 格式: select variable in list do 循环体命令 done 示例: 在这个…

    Linux干货 2016-08-24
  • Linux用户和组管理

    使用对象:Linux初学者   Linux系统中用户和组管理是很重要的一部分内容。许多初学者在学习或刚接触到用户管理的时候会觉得很难理解,命令多、选项多、配置文件也多,用命令可以修改,用配置文件也可以修改,三两下就被绕进去了。其实完全没必要晕,只要了解了用户管理的方式,就会很容易理解命令选项与配置文件之间的关系。下面我们就来了解下用户管理命令与配置…

    Linux干货 2016-10-23