何为正则表达式?

何为正则表达式

 

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

相关推荐

  • linux初识

    一、计算机的组成及其功能: 存储器:    实现记忆功能的部件用来存放计算程序及参与运算的各种数据 运算器:    负责数据的算术运算和逻辑运算即数据的加工处理 控制器:    负责对程序规定的控制信息进行分析,控制并协调输入,输出操作或内存访问 输入设备:    实现计算程序和…

    Linux干货 2016-10-30
  • Linux 基础以及相关基础命令

    1.计算机的组成 计算机由5大部分组成,cpu(运算器,控制器)输入单元,输出单元,内存。  运算器:负责数据的运算  控制器:负责各主件之间的协调控制  输入单元:指令的输入  输出单元:计算结果的输出  内存:为cpu需要运算的数据提供存储 2 linux 常见的发行版   Debian :ub…

    Linux干货 2016-09-14
  • N26 第一周作业

    一、计算机的组成及其功能 计算机:硬件部分、软件部分硬件部分:CPU:运算器和控制器存储器:存储数据输入设备:输入数据输出设备:输出数据软件部分:Kernel:管理和协调硬件,提供基本功能,为应用软件提供平台Application:为某种特定用途开发的软件二、Linux的发行版 Debian全称Debian GNU/Linux,采用Linux作为内核,由De…

    Linux干货 2017-02-24
  • 马哥教育网络班21期+第6周课程练习

    VIM基础知识 常用模式: 编辑模式–>命令模式 输入模式 末行模式:内置的命令行接口 模式转换: 编辑模式–>输入模式 i:在光标所在处前转换为输入模式; a:在光标所在后面转入输入模式; o:在当前光标所在行的下方打开一个新行,并转为输入模式; I:在当前光标所在行的行首输入; A:在当前光标所在行的行尾输入; O:在当前光标所在行的上方…

    Linux干货 2016-08-15
  • 马哥教育网络班21期第4周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 # cp -r /etc/skel/ /home/tuser1 # chmod -R go= /home/tuser1/ 2、编辑/etc/gr…

    Linux干货 2016-07-27
  • rhel6.7安装pymssql(通过Python连接MSsql数据库)

    依赖安装: freetds、python-devel、cython、Python3.x 1、安装freetds tar -jxvf freetds-dev.0.99.134.tar.bz cd freetds-dev.0.99.134 ./configure –prefix=/usr/local/freetds&nb…

    Linux干货 2016-05-23