《linux正则表达式》PPT课件.ppt_第1页
《linux正则表达式》PPT课件.ppt_第2页
《linux正则表达式》PPT课件.ppt_第3页
《linux正则表达式》PPT课件.ppt_第4页
《linux正则表达式》PPT课件.ppt_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

正则表达式,曾树洪,正则表达式,很多不同的unix命令都采用一种便捷一致的方法来说明匹配模式,这种方法就是正则表达式,先学习一个命令:grep,grep-acinv搜索字符串filename-c:计算找到搜索字符串的次数。-n:输出行号-v:反向选择-l只给出包含给定模式的文件列表,而不给出文件中的匹配行-o只输出匹配的内容,搜索特定字符串,$grepntheexpress$grepvntheexpress$grep-lthe*.c在所有源文件中查找the,列出包含the的文件名,的使用,$grepntaestexpress$grepnooexpress$grepngooexpress$grepna-zooexpress$grepn0-9express,和$,$grepntheexpress$grepna-zexpress$grepna-zA-Zexpress$grepn.$express$grepn$express$grepv$express|grepv#,.和*,$grepng.dexpress$grepnooo*express$grepngoo*gexpress$grepng*gexpress$grepng.*gexpress$grepn0-90-9*express,$grepno2express$grepngo2,5gexpress$grepngo2,gexpress,字符类描述,:alnum:字母数字a-zA-Z0-9:alpha:字母a-zA-Z:blank:空格或制表键:cntrl:任何控制字符:digit:数字0-9:graph:任何可视字符(无空格):lower:小写a-z:print:非控制字符:punct:标点字符:space:空格:upper:大写A-Z:xdigit:十六进制数字0-9a-fA-F,字符类描述,注意区别以下两个命令:grep-n:space:areexpressgrep-n:space:*areexpress,保存匹配的字符串:(),将捕获的正则表达式匹配的字符串存储在编号为1到9的“寄存器”中。$grepno2express$grepn(.)express匹配行首的第一个字符$grepn(.)1express如果一行的头两个字符相同,就匹配他们$grepn(.).*1$express匹配一行中头一个字符跟最后一个字符相同的行。,正则表达式与命令行特殊符号的区别,$lsl*ls|grepn.*$lsz*ls|grepnz.*$ls!z*,sed的使用,非交互式行编辑器顺序逐行将文件读入到内存中。然后,它执行为该行指定的所有操作,并在完成请求的修改之后将该行放回到内存中,以将其转储至终端,sed工作原理图,sed的语法,sedaddress1,address2optionscommandfilename,sed删除功能d,d:Deletepatternspace.Startnextcycle.观察命令结果:sed-edexpress删除指定行:sed-e1dexpress地址范围:sed-e1,10dexpress从一行开始每隔一行删一行:sed01dexpress从第二行开始每隔7行删一行:sed17dexpress,sed删除功能,带规则表达式的地址删除注释行:sed-e/#/d/etc/services|more删除空行:sed-e/$/dexpress删除第一行到空行:sed-e1,/$/dexpress删除最后一行:sed-e$dexpress删除包含apple的行到包含Her的行:sed-e/apple/,/Her/dexpress,sed打印功能,p:打印命令注意观测下面两个命令的区别:sed-n1pexpresssed1pexpress-n安静模式,练习题,打印tot文件中从包含BEGIN的行开始,并且以包含END的行结束的文本块:思考:1如果文件中没有“BEGIN”会怎样?2如果文件中没有“END”会怎样?,练习题,只打印C源文件中的main()函数,练习题,删除tot文件中从BEGIN开到END结束的块中包含Name的行sed/BEGIN/,/END/Name/d;tot,sed功能:替换,s/oldvalue/newvalue/实例:$echomynameiszsh|seds/zsh/shz/,多次修改,1使用e选项实例:$echomynameiszsh|sed-es/is/are/-es/zsh/shz/$,多次修改,2用分号来分隔命令实例:$echomynameiszsh|seds/is/are/;s/zsh/shz/注意分号必须是紧跟斜线之后的下一个字符,全局替换,gsed默认处理每一行中出现的第一个选定序列,如果要处理出现的每一个项目,使用g实例:$echomynameiszshzsh|seds/zsh/shz/g,替换每行第N个匹配,$echomynameiszshzsh|seds/zsh/shz/1$echomynameiszshzsh|seds/zsh/shz/2,练习题,catmyfile.htmlThisiswhatImeant.删除HTML标记,也就是要得到:ThisiswhatImeant.,sed替换功能案例,用sed实现unix2dos命令功能unix2dosexpresscat-vexpresssed-is/.$/express思考,怎样用sed命令将unix格式文件转换成dos格式?,案例,案例:老大要求我替换一个大容量文件(大约6-7G)的某些信息,直接用vim打开手动编辑的话那速度简直是苦不堪言,于是我再次想到了awk。仅仅是一些替换工作就用awk太小题大做了,而且在我用awk处理的时候出了一个大问题:文件太大,awk无法打开,我没有对这样的异常做防御,导致后面的操作出现了一连串的问题,最终的结果就是我用了一个空文本替换了刚才那个6-7G的文件。幸好还有备份,汗!。正在我。,老大已经搞好了,就是用了一行sed:sed-iXXX-es/XXX/XXX/g,y命令,y是一个管局命令,拒绝使用后缀flag/gsedy/1234567890/abcdefghij/sedy,nN命令,nNRead/appendthenextlineofinputintothepatternspace.打印奇数行:cat-nexpress|sed-np;n打印偶数行:cat-nexpress|sed-nn;p思考下面的功能:cat-nexpress|sed-np;Ncat-nexpress|sed-nN;pcat-nexpress|sed-np;dcat-nexpress|sedd;ncat-nexpress|sedn;dcat-nexpress|sed1d;n;d,案例,输出匹配行的下一行sed-n/apple/n;pexpress区别:sed-n/apple/n;pexpress,sed更多功能,h:拷贝模板块的内容到内存中的缓冲区。H:追加模板块的内容到内存中的缓冲区g:获得内存缓冲区的内容并替代当前模板块中的文本。G:获得内存缓冲区的内容并追加到当前模板块文本的后面=:出行号x:互换模板块中的文本和缓冲区中的文本。,案例,为文件加行号sed=express|sedN;s/n/:/给非空行加行号sed/./=express|sed/./N;s/n/:/,案例,删除连续重复行sed$!N;/(.*)n1$/!P;Dchongfu,案例,用sed实现tac功能sed-e1!G;h;$!dexpress,案例,从字串中解析出两个子串(前2各字符和后9个字符)echoWeLoveChinaUnix|sed-eH;s/(.).*/1/;x;s/.*(.9)$/1/;x;G;s/n/备注:该例仅仅说明各种命令的功能,如果单纯为了完成任务,以下命令更简单:echoWeLoveChinaUnix|seds/(.).*(.9)$/12/,案例,观测脚本ip的内容并分析其功能注意观察ifconfigifconfig|./ip,练习题,文件a的内容如下:1234567执行sedN;$!Da结果?,保存输出文件,$sed/two/s/1/2/sample_onesample_two直接修改原文件:-ised-i$dexpress,脚本文件,$catsedlist/two/s/1/2/three/s/1/3/注意当调用-f选项时,在源文件内或命令行中不使用撇号,$sed-fsedlistsample_oneone1two2three3one1two2two2three3$,“-f”选项,Sed功能3:增加和插入文本,$sed$aThisiswherewestopthetestsample_oneone1two1three1one1two1two1three1Thisiswherewestopthetest$,注意:美元符号($)表示文本将被添加到文件的末尾。反斜线()是必需的,它表示将插入一个回车符。,Sed功能3:增加和插入文本,$sed3aThisiswherewestopthetestsample_oneone1two1three1Thisiswherewestopthetestone1two1two1three1$,Sed功能3:增加和插入文本,$sed3iThisiswherewestopthetestsample_oneone1two1Thisiswherewestopthetestthree1one1two1two1three1$,添加和插入的区别:添加跟在指定的行之后,而插入从指定的行开始,读写文件,$sed/two/s/1/2/three/s/1/3/1,3wsample_threesample_oneone1two2three3one1two2two2three3$,$catsample_threeone1two2three3$,修改命令,替换是对字符逐个进行,而修改功能与删除类似,它影响整行:$sed/two/cWearenolongerusingtwosample_one,提前退出,$sed/two/s/1/2/three/s/1/3/5qsample_oneone1two2three3one1two2$,$sed/two/s/1/2/three/s/1/3/three/qsample_oneone1two2three3$,提前退出,思考:sed110qfilename有什么作用?,cut,cut-d分隔字元-cffields參數說明:-d:後面接的是用來分隔的字元,預設是空白字元在用cut从文件中析取字段时,如果没有指定分隔符,默认分隔符是制表符。-c:後面接的是第幾個字元-f:後面接的是第幾個區塊?,cut,$cut/etc/passwd|cut-d:-f1$last|cut-df1$last|cutdf3,5$last|cutc1-20$last|cutc12-,paste,paste格式为:paste-d-s-file1file2-d指定不同于空格或tab键的域分隔符。例如用分隔域,使用-d。-s将每个文件合并成行而不是按行粘贴。-使用标准输入。例如ls-l|paste-,意即只在一列上显示输出。粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同,paste:,$catnamestongfred$catnumbers(0752)2121211(0752)2121212,$pastenamesnumberstong(0752)2121211fred(0752)2121212$pastenumbersnames(0752)2121211tong(0752)2121212fred,paste,$pasted:numbersnames(0752)2121211:tong(0752)2121212:fred,$pastesnamesnumberstongfred(0752)2121211(0752)2121212$ls/etc|paste-d-$ls/etc|paste-d-,sort,排序-u在结果中去掉重复行-r反序排序-o指定输出文件-n使用算术方法排序(默认是字符)-kn按指定字段排序-t分隔符(默认是TAB健),测试是否分类排序,catvideo.txtvideo.txt包含了上个季度家电商场的租金情况。各域为:(1)名称,(2)供货区代码,(3)本季度租金,(4)本年租金。域分隔符为冒号-c测试是否分类排序,如果没有,出现错误信息,如果有,没有信息输出注意观测以下命令sort-cvideo.txtsortvideo.txtvideo2.txtsort-cvideo2.txt,保存输出,-o保存输出sortvideo.txtvideo2.txt等同sortvideo.txt-ovideo2.txt注意观测以下命令结果:cpvideo.txtvideosortvideo-ovideocatvideosortvideovideocatvideo,更多功能,反向排序:sort-rvideo.txt按指定域分类:sort-t:-k3video.txt按数字大小排序:sort-t:-k3-nvideo.txt删掉重复行:sort-uvideo.txt,更多功能,sortvideo.txtvideo2.txtsort-cvideo2.txt测试video2.txt是否分类sort-ucvideo2.txt测试video2.txt是否有重复行,更多功能,同时处理多个文件sort-mfile1file2file3outfile在将所有输入文件一起进行sort-m之前,每个文件都必须经过排序方法2:catfile1file2file3|sortoutfile,uniq,去掉(连续)重复行一般uniq假定文件已分类,并且结果正确。(所以一般是配套sort使用)-i忽略大小写-c计算行出现的次数-d找出重复行,除去重复行,注意观测以下命令catuniq.txtuniquniq.txtsortuniq.txt|uniq,打印每一重复行出现次数,-cUniq-cuniq.txtSortuniq.txtuq.txtUniq-cuq.txt,只显示不重复行,-uUniq-uuq.txt,显示重复出现的不唯一行,-duniq-duq.txt,对特定域进行测试,-ffn表示对第n+1列开始进行测试catpart.txtuniq-f4parts.txtuniq-f5parts.txt,应用实例,系统日志的某些项会复制许多次,这使得查看日志很难。使用简单的uniq无法完成任务,因为每一项都以不同的时间戳记开头。但是如果您告诉它跳过所有的时间字段,您的日志一下子就会变得更加便于管理。试一试:uniq-f3/var/log/messages,join连接两个文件,将两个包含有共同字段的文件连接在一起,默认情况,2个文件的第一字段是共同字段。catname.txtcattown.txtjoinname.txttown.txtname.txt有5行,town.txt有5行,join处理后的文件只有4行。,不匹配连接,join-a1-a2names.txttown.txtjoin-a1names.txttown.txt,选择部分列连接,join-o1.1,2.2names.txttown.txt结果将只有name.txt的第一列和town.txt的第二列,指定

温馨提示

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

最新文档

评论

0/150

提交评论