- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UNIX下的正则表达式.pdf
UNIX 下的正则表达式(Regular Expression)
(初 2002 年 3 月 12 日,最后修改:2002 年 3 月 26 日 ,修改次数:21 蓝飞鸟)
让我们来看一个命令,用 ls 命令列出目录:
ls -l |grep ^d
初学 Linux 的朋友,明白 ls 和 DOS 的 DIR 是意思相差不多,但是如果没弄明白 Regular
Expression,就只会觉得 UNIX 下的命令太复杂,而不会享受到 UNIX 的命令的强大。象这
个命令:ls -l |grep ^d 就运用了|(管道)、grep(搜索)和正则表达式,而要看懂这个命令,
关键的还在正则表达式。
正则表达式就是 regular expression,从英文翻译过来常有多种译法,因此 regular expression
还有别的叫法,如规则表达式、文字匹配模式,一般来说是在使用 grep 搜索,sed 和 awk 语
言时列出或者匹配字符串的一种办法。值 得注意的正则表达式看起来颇象一些命令的文件
名匹配模式,如 find,实际上,正则表达式与文件名匹配模式不同。在 UNIX 中,正则表达
式是由一个或多个 字符和 meta 字符组成的字符串,把正则表达式与数据源进行匹配之前,
程序自动把它展开变为规定的模式,然后一个字符一个字符的进行比较。
我查了一下帮助资料,目前 regular expression 有两种形式,一种是现代的(POSIX 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 字符之前,先约定几个术语(借用
POSIX 中的说明文档)。
每个 RE 由一个或多个 分支 构成,每个分支之间由|符号分隔。如在 file 中查找匹配字符串
string1 或 string2 的行:
egrep string1|string2 file
每个分支由一个或多个 块 连接而成,依次匹配每一个块。
每一个块由一个 原子 后面跟*、+、-、?符号或者{}(表示范围)组成,原子可以是用()括号
包围起来的 RE。
使用中,通常要把 RE 用(引号)引起来,否则,{}和(
文档评论(0)