- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第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 字符转义 读者可能已经有了这样的疑问:既然句点“.”在正则表达式中表示“除换行符之外的任意一个字符”,那么如何匹配句点“.”本身呢?这就需要用到转义字符“\”。“\”可以取消所有元字符的特殊含义,例如“\.”匹配句点“.”,“\[”匹配左方括号“[”……而为了匹配“\”,就要用“\\”来指定。例如下面这条正则表达式匹配“”:
您可能关注的文档
- 第08章节输入设备.ppt
- 第11章节 抗癫痫药.ppt
- 第11章节 压裂施工.ppt
- 第08章节 消化系统.ppt
- 第11章节 字符串.ppt
- 第10章节_计算机网络安全(余).ppt
- 第11章节 嵌入式GUI程序开发.ppt
- 第11章节 网络安全.ppt
- 第11章节 交通运输.ppt
- 第11章节 行 为.ppt
- 广发证券-建筑-建筑装饰行业:“反内卷”背景下钢结构、水泥、钢铁工程有望受益重视深海经济标的华电科工.pdf
- 中信建投-房地产-房地产行业新发展模式展望系列六:香港楼市现状与启示双轨并行缓解住房压力存量转型助力优质经营.pdf
- 银河期货-红枣专题:红枣行情分析.pdf
- 华福证券-银行业2025中期策略-红利与ROE共同驱动,股份行和城商行相对占优.pdf
- 开源证券-固态电池行业点评-第四期-:上海洗霸拟参竞拍有研稀土硫化锂相关资产,多家公司固态铜箔供应.pdf
- 天风证券-信用策略系列:解析“信用债ETF成分券策略”.pdf
- 中信建投-国际宏观-伊以冲突分析:从影子战争到直接对抗.pdf
- 天风证券-大金重工-002487-打造“制造+服务”全产业链生态,管桩出海实现利润升维.pdf
- 申万宏源-新股巡礼-注册制新股纵览:技源集团HMB全球市占率第一布局多个膳食营养细分市场.pdf
- 华安证券-学海拾珠系列之二百四十:高阶矩视角下的投资组合优化:基于偏度与峰度的马科维茨模型拓展.pdf
文档评论(0)