第21章节 Shell编程.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第21章节 Shell编程

第21章 Shell编程 无法想象没有Shell的Linux会是什么样子。从一开始,Linux就是黑客们的玩具,在Linux的世界里,没有什么是不可控的。如果想要成为一名高级Linux用户,那么Shell编程是必须跨过的一道坎。本章将从正则表达式开始,逐步介绍Shell编程的基本知识。这些内容对于没有任何编程经验的读者可能有点困难,不过想一想将要接触到的激动人心的技术,请打起精神来! 21.1 正则表达式 正则表达式广泛地应用在各种脚本编程语言中,包括Perl、PHP、Ruby等等。Linux的各种编程工具也大量采用了正则表达式。可以说,有字符串处理的地方,就有正则表达式的身影。本节简要介绍正则表达式的基本语法。在开始之前,首先关心一下正则表达式的“定义”。 21.1.1 什么是正则表达式? “正则表达式(regexps)”这个词背后的历史似乎很难考证。一直以来,这个说法被人们广泛应用,没有人关心——或许也没有必要关心——它是怎么来的。在很多时候,“正则表达式”又被称作“模式”,所以千万别被这两件不同的外衣搞糊涂了,至少在Linux中,“模式”和“正则表达式”讲的是一回事情。 那么究竟什么是正则表达式?简单地说,这是一组对正在查找的文本的描述。考虑一个生活中的例子,老师对调皮捣蛋的学生说:“把单词表中a开头、t结尾的单词抄写10遍交给我。”那么对于正在抄写单词的学生而言,“a开头、t结尾的单词”就是“对正在查找的文本的描述”。同样可以告诉Shell,“把当前目录下所有以e结尾的文件名列出来”,这是正则表达式擅长做的事情。 21.1.2 不同风格的正则表达式 正则表达式是一种概念。在此基础上,人们充分发挥想象力,发明了各种风格的正则表达式。在这个领域,至今没有什么标准可言,不同的软件和编程语言支持不同风格的表达式写法,也难怪刚刚接触正则表达式的用户会因此感到困惑。 目前在GNU/Linux中,有两套库可用于正则表达式编程:POSIX库和PCRE库。前者是Linux自带的正则表达式库;后者是Perl的正则表达式库。从功能上看,PCRE风格的正则表达式更强大一些,但也更难掌握一些。本节选择POSIX风格的正则表达式作为讨论对象,POSIX库不需要额外安装,直接使用即可。在工具方面,本节所有的示例都在egrep工具中测试通过,参考5.5.8节了解egrep的详细信息。 21.1.3 快速上手:在字典中查找单词 现在来考虑本节开始的那个例子。老师要求抄写单词表中“a开头、t结尾”的单词,学生现在很想知道他究竟要花多少时间在这个作业上。/usr/share/dict/words中包含了多达98568个单词,看起来无论老师所说的“单词表”是什么,Linux给出的估算只多不少: $ egrep ^a.*t$ /usr/share/dict/words ##列出单词表中a开头t结尾的所有单词 abaft abandonment abasement abatement abbot abduct aberrant abet abhorrent 21.1.4 字符集和单词 在正则表达式中,句点“.”用于匹配除换行符之外的任意一个字符。下面这条正则表达式可以匹配诸如“cat”、“sat”、“bat”这样的字符串: .at “.”能够匹配的字符范围是最大的。上面这个正则表达式还能够匹配“#at”、“~at”、“_at”这样的字符串。很多时候,需要缩小选择范围使匹配更为精确。为了限定“at”前的那个字符只能是小写字母,可以这样写正则表达式: [a-z]at 21.1.5 字符类 除了字符集,POSIX风格的正则表达式还提供了预定义字符类来匹配某些特定的字符。例如,下面的命令列出文件中所有以大写字母开头,以小写t结尾的行: $ egrep ^[[:upper:]]t$ words At It Lt Mt Pt St 21.1.6 位置匹配 字符“^”和“$”分别用于匹配行首和行尾。下面这条正则表达式用于匹配所有以“a”开头、“t”结尾、“a”和“t”之间包含一个小写字母的行: ^a[a-z]t$ “^”和“$”不必同时使用,下面这条表达式匹配所有以数字开头的行: ^[0-9] 可以想见,“^$”这样的写法将匹配空行。而“$^”则是没有意义的,系统不会对这个表达式报错,但也不会输出任何东西。 21.1.7 字符转义 读者可能已经有了这样的疑问:既然句点“.”在正则表达式中表示“除换行符之外的任意一个字符”,那么如何匹配句点“.”本身呢?这就需要用到转义字符“\”。“\”可以取消所有元字符的特殊含义,例如“\.”匹配句点“.”,“\[”匹配左方括号“[”……而为了匹配“\”,就要用“\\”来指定。例如下面这条正则表达式匹配“”:

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档