第二章正则表达式_第1页
第二章正则表达式_第2页
第二章正则表达式_第3页
第二章正则表达式_第4页
第二章正则表达式_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

正则表达式

简介简介正则表达式现在应用十分的广泛,出现在UNIX/Linux相关的各种领域和多种编程语言里。Linux系统管理员应该熟悉这些表达式。从常见的shell命令到大名鼎鼎的Perl语言再到当前非常流行的PHP,它都扮演着一个重要的角色。甚至windows的命令行控制台也支持正则表达式。可以说,它是学好Linux/UNIX必需掌握的一个知识点,否则你连Linux的启动脚本都读不懂。正则表达式基础正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字元字符则具有特殊的含义元字符操作解释例子结果.Matchanyonecharactergrep.ordsample.txtWillmatch“ford”,“lord”,“2ord”,hefilesample.txt.[]Matchanyonecharacterlistedbetweenthebracketsgrep[cng]ordsample.txtWillmatchonly“cord”,“nord”,and“gord”[^]Matchanyonecharacternotlistedbetweenthebracketsgrep[^cn]ordsample.txtWillmatch“lord”,“2ord”,etc.butnot“cord”or“nordgrep[a-zA-Z]ordsample.txtWillmatch“aord”,“bord”,“Aord”,“Bord”,etc重复操作符

重复操作符,或数量词,都描述了查找一个特定字符的次数。它们常被用于字符匹配语法以查找多行的字符参见下页表锚

锚是指它所要匹配的格式,如下页图所示。使用它能方便你查找通用字符的合并。例如,我用vi行编辑器命令:s来代表substitute,这一命令的基本语法是:s/pattern_to_match/pattern_to_substitute/

一些保留字符

Res的最后一个最重要特性是保留字符(也称特定字符)。例如,如果你想要查找“ne*rd”和“ni*rd”的字符,格式匹配语句“n[ei]*rd”与“neeeeerd”和“nieieierd”相符合,但并不是你要查找的字符。因为‘*’(星号)是个保留字符,你必须用一个反斜线符号来替代它,即:“n[ei]\*rd”。其它的保留字符包括:一些保留字符^(carat).(period)[(leftbracket}$(dollarsign)((leftparenthesis))(rightparenthesis)|(pipe)*(asterisk)+(plussymbol)?(questionmark){(leftcurlybracket,orleftbrace)\backslashvi替换命令用法:ranges/pat1/pat2/g:是Vi的命令执行界面。

range是命令执行范围的指定:百分号(%)表示所有行

点(.)表示当前行

美元($)表示最末行

例如:

10,20表示第10到20行,

.,$表示当前行到最后一行,.

+2,$-5表示当前行后两行直到全文的倒数第五行

s表示其后是一个替换命令。

pat1这是要查找的一个正则表达式

pat2这是希望把匹配串变成的模式的正则表达式

g可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串。vi替换命令用法:s/org_str/dest_str

//替换目标第一行中第一处的内容:s/org_str/dest_str/g

//替换目标第一行中所有符合的内容:%s/ogr_str/dest_str

//替换每一行中第一处的内容:%s/ogr_str/dest_str/g

//替换每一行中所有符合的内容举例假定有个文件test.txt包含以下几行内容:

heisarat

heisinarut

thefoodisRotten

Ilikerootbeer

我们可以使用grep命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一行,并将至少有一处匹配表达式的所有行显示出来。

grep

r.t

test.txt

行首行尾匹配两次匹配一次在vim中的应用把一个或者多个空格替换为一个空格去掉行尾的所有空格。将所有的r[a-z]*t改为r8t。

将所有方法foo(a,b,c)的实例改为foo(b,a,c)将所有方法foo(a,b,c)的实例改为foo(b,a,c)[^,]

除了逗号之外的任何字符

[^,]*

0或者多个非逗号字符

\([^,]*\)

将这些非逗号字符标记为\1,这样可以在之后的替换模式表达式中引用它

\([^,]*\),

我们必须找到0或者多个非逗号字符后面跟着一个逗号,并且非逗号字符那部分要标记出来以备后用。假设有一个CSV(commaseparatedvalue)文件,里面有一些我们需要的信息,但是格式却有问题,目前数据的列顺序是:姓名,公司名,州名缩写,邮政编码,现在我们希望讲这些数据重新组织,以便在我们的某个软件中使用,需要的格式为:姓名,州名缩写-邮政编码,公司名。也就是说,我们要调整列顺序,还要合并两个列来构成一个新列。另外,我们的软件不能接受逗号前后面有任何空格(包括空格和制表符)所以我们还必须要去掉逗号前后的所有空格。

BillJones,

HI-TEKCorporation,

CA,95011

SharonLeeSmith,

DesignWorksIncorporated,

CA,95012

B.Amos

,

HillStreetCafe,

CA,95013

AlexanderWeatherworth,

TheCraftsStore,

CA,95014我们希望把它变成这个样子:BillJones,CA95011,HI-TEKCorporation

SharonLeeSmith,CA95012,DesignWorksIncorporated

B.Amos,CA95013,HillStreetCafe

AlexanderWeatherworth,CA95014,TheCraftsStore如何去掉2,3列之间的逗号?Phone.txtFrancis,John5-3871

Wong,Fred4-4123

Jones,Thomas1-4122

Salazar,Richard5-2522把所有电话号码以5开头以1结束的行打印出来,

grep5*1'phone.txt

把所有电话号码以5开头以1结束的行打印出来,打印所有姓开头是J或者W的行

grep'^[JW]'phone.txt

打印所有姓开头是J或者W的行

打印所有姓的开头是M到Z之间任一字符的行

gr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论