第六章 UNIX字符串处理进阶.docVIP

  1. 1、本文档共85页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
正则表达式(Regular Expression) 1 sed命令介绍 15 tr命令介绍 48 grep命令介绍 51 find命令介绍 53 awk命令介绍 60 cut和paste命令介绍 77 if的判断条件 80 正则表达式(Regular Expression) 正则表达式(RE)用于描述字符串的模式(pattern),即字符串的特征或样式,比如以字母a开头或包含字符串cold等。计算机按照这些特征来对字符串进行测试(或匹配),就是说判断字符串是否符合这些特征,被检测的字符串称为被测试字符串。如果被测试字符串符合一个正则表达式所描述的规则,则称此正则表达式匹配(match)此字符串。“匹配”这个单词有时也用做名词,表示字符串中符合正则表达式的那部分,在很多应用中(比如perl脚本中)这部分字符串会被提取出来以进行判断。 比如/[abc]kkk$/是一个正则表达式,它表示字符串的最后3个字符必为kkk,而倒数第4个字符必须为abc这三个字符中的一个。按此规则,字符串”pqrakkk”,”zzzbkkk”,”78ckkk”等都匹配此表达式,匹配分别为akkk,bkkk和ckkk。而”34akk”,”iokkk”,”abc”,”kkabc”等都不匹配上面的正则表达式。 在UNIX中,正则表达式经常被用于grep、sed和awk等命令中,被测试字符串经常是一个文本文件中的行。在UNIX系统的文本文件中,行与行之间依靠换行符\n(Windows系统中则为\r\n)来分隔。 不仅UNIX中使用正则表达式,很多其它系统(比如BGP路由协议)都使用它。RE用于表达字符串特征的符号称为RE特殊字符或RE控制字符,大部分RE特殊字符是标准的(比如^表示字符串开头),即在所有系统通用。这一点与UNIX shell中的特殊字符不同,后者仅限于在UNIX中使用。即使这两者之间某几个符号所表示的意思碰巧有点像,但是它们之间没有任何关系。 下面介绍一下正则表达式的各种控制符号,及其规则 锚点(anchor) 锚点用于在字符串中指定特定的位置,常见的有: ^ 当此字符不在方括号[]内时,表示行首,即输入字符串开始的位置,如^abc表示以abc为开头的行。 $ 表示行尾,即输入字符串结束的位置,如abc$表示以abc为结尾的行。而^$表示空行。字符$在很多地方表示结尾处,比如在vi中就用于表示行尾。但在UNIX shell中符号$表示提取变量的值。 \和\ \表示词首,如\abc表示以abc为开头的词,\表示词尾,如abc\表示以abc为结尾的词 \b和\B \b表示单词的边界,而\B表示单词的中间部分。例如,er\b可以匹配never中的er,但不能匹配verb中的er。\B则正好相反。 修饰字符(modifier) 修饰字符本身不具有意义,专门用以修改前一个字符集的出现次数,常见的有: * 表示前一个字符集的出现次数为0次或多次,如ab*c表示a与c之间可有0个或多个b存在。表达式zo*能匹配z以及zoo。符号*等价于 {0,}。 虽然碰巧UNIX shell中也以*表示0个或多个任意字符,但是两者的用法有本质区别。在shell中*可以独立存在,它本身就表示0个或多个任意字符。而在正则表达式中*必须跟在另一个元字符后面,用于表示这个作为前导的元字符的0次或多次重复。要想表达任意多个任意字符,应该使用.*。 比如要在一行字符中搜索以a开头以b结尾,中间有任意多任意字符的子字符串,就应该表示为a.*b,这可以匹配ab,aabbb或aoookkkb等字符串。而如果表示为a*b,则只能匹配b,ab或aaaaaab等字符串。 ? 表示前一个字符集的出现次数为0次或1次,如ab?c表示a与c之间可有0个或1个b存在。do(es)?可以匹配do或does中的do。符号? 等价于 {0,1}。 + 表示前一个字符集的出现次数为1次或多次,如ab+c表示a与c之间可有1个或多个b存在。zo+ 能匹配 zo 以及 zoo,但不能匹配 z。符号+ 等价于 {1,}。 {n} 表示前一个字符集的出现次数必须为n次,如ab{3}c表示a与c之间必须有3个b存在。多于3个或少于3个都不行。 {n,m} 表示前一个字符集的出现次数为n到m次,如ab{3,5}c表示a与c之间有3到5个b存在。若省略m而表达成{n,}的形势,则表示最少n次,多则无限。 正则表达式匹配的贪婪模式与懒惰模式 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。 有时,我们更需要懒惰匹配,也就是

文档评论(0)

xiaofei2001129 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档