UNIX下正则表达式.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UNIX 下的正则表达式(Regular Expression ) (初2002 年 3 月 12 日,最后修改:2002 年 3 月 26 日 ,修改次数:21 蓝飞鸟) 让我们来看一个命令,用 ls 命令列出目录: ls -l |grep ^d 初学 Linux 的朋友,明白 ls 和 DO 的 DIR 是意思相差不多,但是如果没弄明白 Regular Expression ,就只会觉得UNIX 下的命令太复杂,而不会享受到 UNIX 的命令的强大。象这 个命令:ls -l |grep ^d 就运用了| (管道)、grep (搜索)和正则表达式,而要看懂这个命令, 关键的还在正则表达式。 正则表达式就是 regular expression ,从英文翻译过来常有多种译法,因此regular expression 还有别的叫法,如规则表达式、文字匹配模式,一般来说是在使用 grep 搜索,sed 和 awk 语 言时列出或者匹配字符串的一种办法。值 得注意的正则表达式看起来颇象一些命令的文件 名匹配模式,如 find ,实际上,正则表达式与文件名匹配模式不同。在UNIX 中,正则表达 式是由一个或多个 字符和 meta 字符组成的字符串,把正则表达式与数据源进行匹配之前, 程序自动把它展开变为规定的模式,然后一个字符一个字符的进行比较。 我查了一下帮助资料,目前 regular expression 有两种形式,一种是现代的(PO IX 1003.2 叫 这种为扩展的 regular expression ),另一种是老的(基本regular expression )形式,我这里讲 的完全针对现代形式,如 egrep 的 regular expression (以下简称RE ),因为以前的基本RE 只保留在那些向后兼容老程序中。 UNIX 有很多地方会用到正则表达式,在大文件中查找符合条件的字符串或 SHELL 编程中, 要想把自己的想法贯彻给 UNIX ,非得熟练运用RE 不可,搞不 清楚 RE ,在UNIX 中,无异 于背着肥马爬行,既觉得处处不方便,做甚麽事都碍手碍脚,又浪费时间体力。想想,本来 敲一行命令然后去喝杯茶就能完成的工 作,非得守在计算机旁边敲了命令等着结果输出, 再接着输入数据,眼睛还得盯着屏幕,费神又费力。如果弄明白了 RE ,许多时候就能得心 应手。 在我以前的学 习过程中,随着对 Linux 系统的熟悉,我发现学 习UNIX 第 步就是要弄清 RE ,这样,更容易看懂复杂的命令组合。正则表达式的具体应用,要结合实际情况,但首 先得搞懂几个 RE 的基本观念。 RE 由以下几个基本部分组成: • 字符集,指匹配一个或多个指定的字符。字符集可以指定范围或 列出所有指定的 字符。 • 定位标识符,指明在一行的行首或是行 。 • 匹配次数。一般指某个字符连续重复出现多次。 • meta 字符。必须结合 meta 字符才能实现。 总的来说,meta 字符是关键,明白了 meta 字符的含义,就容易搞清楚字符集、定位标识符 以及匹配次数,通常有以下 meta 字符,在列出 meta 字符之前,先约定几个术语(借用 PO IX 中的说明文档)。 每个 RE 由一个或多个 分支 构成,每个分支之间由|符号分隔。如在 file 中查找匹配字符串 string1 或 string2 的行: egrep string1|string2 file 每个分支由一个或多个 块 连接而成,依次匹配每一个块。 每一个块由一个 原子 后面跟*、+ 、-、?符号或者{} (表示范围)组成,原子可以是用()括号 包围起来的 RE。 使用中,通常要把 RE 用 (引号)引起来,否则,{}和()必须加\ (转义符) ,即\ {原子\ }, \(原子\)。值得注意的是,grep 和 egrep(扩展 grep)存在着诸多不同,其中有 点就是,在 egrep 中的{}、()、| 等符号,只要在(引号)中,不加\ (斜杠),而grep 中的这些符号, 在 (引号)中也必须加\ (斜杠),如egrep string1|string2用 grep 表示就是 grep string1\| string2 $ 从行 开始匹配 ^ 从行首开始匹配 .

文档评论(0)

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

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

1亿VIP精品文档

相关文档