Linux Shell命令行及脚本编程实例详解课件:第9章 正则表达式_第1页
Linux Shell命令行及脚本编程实例详解课件:第9章 正则表达式_第2页
Linux Shell命令行及脚本编程实例详解课件:第9章 正则表达式_第3页
Linux Shell命令行及脚本编程实例详解课件:第9章 正则表达式_第4页
Linux Shell命令行及脚本编程实例详解课件:第9章 正则表达式_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章

正则表达式9.1什么是正则表达式9.1.1定义正则表达式是一个描述一组字符串的模式。与算术表达式类似,正则表达式也是由各种操作符结合小的表达式组成,这些所谓的操作符,即是正则表达式中的特殊元字符。换句话说,正则表达式是由普通字符和元字符组成的字符集,而这个字符集匹配(或指定)一个模式。其基本结构单元是匹配单个字符的正则表达式。任何带有特殊含义的元字符可以通过在字符前加反斜杠‘\’来引用。正则表达式的主要作用是文本搜索和字符串处理。一个正则表达式匹配单个字符或一个字符串,或字符串的一部分。9.1.2正则表达式类型正则表达式有两种类型,分别是:基本正则表达式扩展正则表达式9.1.2正则表达式类型基本正则表达式具有如下的元字符:星号--*:匹配它前面的字符串或正则表达式任意次(包括0次)。比如,“1122*”将匹配11+一个或多个2,其可能匹配的字符串将是112、1122、1122222、11223343等。句点--.:匹配除换行符之外的任意一个字符。比如,“112.”将匹配112+至少一个字符,其可能匹配的字符串是1121、1122、112abc等,但不匹配112。插入符号--^:匹配一行的开始,但有时依赖于上下文环境,可能表示否定正则表达式中一个字符串的意思。比如,“^abc”将只匹配行首的abc字符串。美元符--$:在一个正则表达式的末尾,匹配一行的结尾。比如,“123$”将只匹配行尾的123,“^$”将匹配一个空行。方括号--[]:匹配方括号内指定的字符集中的一个字符。比如,“[abc]”将匹配字符a、b、c中的任意一个字符,“[a-h]”将匹配从a到h的任意一个字符,“[A-Z][a-z]”将匹配任意一个大写或小写字母,“[^a-d]”将匹配除a到d之外的所有字符。反斜线符号--\:转义一个特殊的字符,使这个字符得到字面意义的解释。比如,“\$”将表示回它的原意“$”,而不是表示行尾的的正则表达式含义。类似地,“\\”表示的字意是“\”。转义尖括号--\<\>:用于标记单词边界。尖括号必须是转义的,否则它们只有字符的字面含义。比如,“\<the\>”匹配单词“the”,但不匹配“them”、“there”、“other”等等。9.1.2正则表达式类型扩展正则表达式,在上面的基本正则表达式的元字符的基础上又增加了几个元字符,如下所示:问号--?:匹配0个或1个前面的字符,它通常用于匹配单个字符。比如,“ab?c”将匹配“ac”或“abc”。加号--+:匹配一个或多个前面的字符,它和星号*的作用相似,但它不匹配0个字符的情况。比如,“ab+c”将匹配“abc”、“abbc”、“abbb…c”等。转义波形括号--\{\}:指示匹配前面正则表达式的次数。波形括号必须是转义的,否则它们只有字符的字面含义。比如“[0-9]\{5\}”将匹配5位数字。圆括号--():包含一组正则表达式。它们与下面要讲的“|”操作符一起使用,或是在使用expr提取子字符串时使用。竖线--|:正则表达式的“或”操作符匹配一组可选的字符。比如“a(b|c)d”将匹配“abd”或“acd”。9.1.3POSIX字符类这是一个指定字符的范围的替代方法,如表9-1所示。POSIX字符含义[:alnum:]匹配字母和数字字符。等同于A-Za-z0-9[:alpha:]匹配字母字符。等同于A-Za-z[:blank:]匹配空格或制表符[:cntrl:]匹配控制字符[:digit:]匹配十进制数字。等同于0-9[:graph:]匹配ASCII码值范围在33-126的字符。与下面的[:print:]相似,但不包括空格字符[:lower:]匹配小写字母。等同于a-z[:upper:]匹配大写字母。等同于A-Z[:print:]匹配ASCII码值范围在32-126的字符。与上面的[:graph:]相似,但多了个空格字符[:space:]匹配空白字符(空格和水平制表符)[:xdigit:]匹配十六进制数字。等同于0-9A-Fa-f9.1.4Bash正则表达式比较操作符从Bash的3.0版本开始,Bash有了内部的正则表达式比较操作符,使用“=~”表示。大部分使用grep或sed命令的正则表达式编写脚本的方法现在可以由带有“=~”操作符的Bash表达式处理,并且Bash表达式可能使你的脚本更容易阅读和维护。与其它比较操作符(例如,“-lt”或“==”等)相同,如果一个表达式(比如,$digit=~"[[0-9]]")左边的变量匹配右边的正则表达式,将返回状态码0,否则返回1。9.2正则应用基础9.2.1实例:使用句点.匹配单字符比如,我们有一个文件list.txt,其内容如下所示:$catlist.txt112211211222221122111abddeabedebbcdebbdde现在我们来搜索此文件中,包含字符串“112”且其后至少有一个字符的行.9.2.2实例:使用插入符号^匹配例如,我们要查找/etc/passwd文件中root账号的信息,如果不使用正则表达式,而只使用root关键字,可能会得到类似如下结果:$greproot/etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin显然,上述的结果并不完全是我们需要的结果。此时,我们使用插入符号元字符就可以只显示root账号的信息9.2.3实例:使用美元符$匹配将插入符号“^”和美元符“$”单独结合使用,可以查找文件中空白行:$grep-v'^$'filename上述示例是打印除空行以外的其它行。使用美元符“$”匹配,我可以查找/etc/passwd中用户默认Shell是Bash的账号:$grep'bash$'/etc/passwd上述示例中,查找的即是以“bash”字符串结尾的行。9.2.4实例:使用星号*匹配我们在Linux的系统日志文件/va/log/messages中查找所有匹配“kernel:*”的行:$grep"kernel:*."/var/log/messages上述示例中,将匹配kernel和冒号“:”,还有紧跟其后0个或多个空格,最后是一个句点“.”匹配任意一个字符。下面的例子是查找文件中,所有包含单词是以字母‘i’开头以字母‘l’结尾的行:$egrep"\<i.*l\>"filename--color或$grep"\<i.*l\>"filename--color9.2.5实例:使用方括号[]匹配比如,找出文件中含有至少11个连续小写字母的行:$grep"[a-z]\{11\}"/var/log/setup.log--color或$egrep"[a-z]{11}"/var/log/setup.log--color查看文件中包含字母‘b’或字母‘s’的行:$grep[bs]filename查看系统日志文件中包含“数字+空格+times”的行:$grep"[0-9]\+times"/var/log/messages--color或$egrep"[0-9]+times"/var/log/messages--color9.2.6实例:使用问号?匹配比如,我们有一个内容如下的文件regexExamp.txt:catregexExamp.txthihellohihellohowareyouhihello我们来查看一下“hi?hello”的匹配结果:$egrep"hi?hello"regexExamp.txthihellohihello或$grep"hi\?hello"regexExamp.txthihellohihello9.2.7实例:使用加号+匹配我们仍然使用上一节中示例文件regexExamp.txt,查看“hi+hello”的匹配将是怎样的结果:$egrep"hi+hello"regexExamp.txthihellohihellohowareyou或$grep"hi\+hello"regexExamp.txthihellohihellohowareyou9.3小结下面我们总结一下本章所学的主要知识:正则表达式是一个描述一组字符串的模式。正则表达式是由普通字符和元字符组成的字符集,而这个字符集匹配(或指定)一个模式。正则表达式的主要作用是文本搜索和字符串处理。一个正则表达式匹配单个字符或一个字符串,或字符串的一部分。正则表达式有两种类型,分别是基本正则表达式和扩展正则表达式。基本正则表达式的元字符有:*、.、^、$、[]、\、\<\>扩展正则表达式在基本正则表达式的元字符

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论