何为正则表达式?

何为正则表达式

 

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)
上一篇 2016-08-16 13:59
下一篇 2016-08-16 13:59

相关推荐

  • yum与rpm生产中最频繁使用

    yum 命令 使用方法: yum [选项] [包名称] 常用选项: install #安装软件,后面跟包名称,例如:yum install wget 安装wget软件包list #列出所有软件,一般和grep一起使用,例如:yum list | grep java ,查看所有java安装包,一般情况下不使用search,grep可以更大范围搜索包,例如只记得…

    Linux干货 2017-04-18
  • N23-第三周博客作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。 [root@localhost ~]# last -1 | head -1 3、取出当前系统上被用户当…

    Linux干货 2016-12-05
  • 【N25第六周作业】VIM、crontab、简单脚本

    请详细总结vim编辑器的使用并完成以下练习题 第二周有写过vim的用法,请查看连接: 周期性任务计划:cron 服务程序: cronie:主程序包,提供了crond守护进程及相关辅助工具; 确保crond守护进程(daemon)处于运行状态: CentOS 7: systemctl  status  cron…

    Linux干货 2016-12-27
  • 分区管理和文件系统

    管理分区:        lsblk           列出块设备        fdisk          创建MBR 分区      &nbs…

    Linux干货 2017-03-11
  • nfs的简单配置及引用

    nfs: Network File System RPC:Remote Procedure Call NFS: sun公司研发, 协议;     NFSv1,没有走出实验室     NFSv2(不安全), NF…

    Linux干货 2016-10-19
  • rpm及yum

    库文件 查看二进制程序所依赖的库文件: ldd /PATH/TO/BINARY_FILE [root@localhost ~]# ldd /bin/bash 管理及查看本机装载的库文件: ldconfig /sbin/ldconfig -p:  显示本机已经缓存的所有可用库文件 名及文件路径映射关系 配置文件:/etc/ld.so.conf, /e…

    Linux干货 2016-08-29