- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
$ 从行 开始匹配
^ 从行首开始匹配
.
您可能关注的文档
- ThinkStation D30用户指南(机器类型:4223、4228 与4229) 2.0.pdf
- think本预装WIN7一键恢复方法(图文).pdf
- TI 选择正确电平转换解决方案.pdf
- TI、MOTO、ST三家公司TL072及TL082对比 Microsoft Word 文档.doc
- TiAlN-SiO2太阳能选择性吸收薄膜的制备及研究.pdf
- Titan与Erdas的几何多项式校正比较.docx
- TMS320F2812CMD文件配置详解.pdf
- TNet:基于树型结构集群工具软件通信协议.pdf
- Tomcat、JDK、MySQL,MyEclipse的安装及配置.docx
- tomcat配置和使用(环境变量设置和测试,一个简单的web应用实例).doc
文档评论(0)