您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 统计图表 > linux正则表达式
正则表达式曾树洪正则表达式很多不同的unix命令都采用一种便捷一致的方法来说明匹配模式,这种方法就是正则表达式先学习一个命令:grepgrep[-acinv]‘搜索字符串’filename-c:计算找到‘搜索字符串’的次数。-n:输出行号-v:反向选择-l只给出包含给定模式的文件列表,而不给出文件中的匹配行-o只输出匹配的内容搜索特定字符串$grep–n‘the’express$grep–vn‘the’express$grep-l‘the’*.c在所有源文件中查找the,列出包含the的文件名[]的使用$grep–n‘t[ae]st’express$grep–n‘oo’express$grep–n‘[^g]oo’express$grep–n‘[^a-z]oo’express$grep–n‘[0-9]’express^和$$grep–n‘^the’express$grep–n‘^[a-z]’express$grep–n‘^[^a-zA-Z]’express$grep–n‘\.$’express$grep–n‘^$’express$grep–v‘^$’express|grep–v‘^#’.和*$grep–n‘g..d’express$grep–n‘ooo*’express$grep–n‘goo*g’express$grep–n‘g*g’express$grep–n‘g.*g’express$grep–n‘[0-9][0-9]*’express{}$grep–n‘o\{2\}’express$grep–n‘go\{2,5\}g’express$grep–n‘go\{2,\}g’express字符类描述[: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:]]are'expressgrep-n'[[:space:]]*are'express保存匹配的字符串:\(…\)将捕获的正则表达式匹配的字符串存储在编号为1到9的“寄存器”中。$grep–n‘o\{2\}’express$grep–n‘^\(.\)’express匹配行首的第一个字符$grep–n‘^\(.\)\1’express如果一行的头两个字符相同,就匹配他们$grep–n‘^\(.\).*\1$’express匹配一行中头一个字符跟最后一个字符相同的行。正则表达式与命令行特殊符号的区别$ls–l*ls|grep–n‘.*’$lsz*ls|grep–n‘^z.*’$ls[!z]*sed的使用非交互式行编辑器顺序逐行将文件读入到内存中。然后,它执行为该行指定的所有操作,并在完成请求的修改之后将该行放回到内存中,以将其转储至终端sed工作原理图sed的语法sed[address1[,address2]][options]'{command}'[filename]sed-删除功能dd:Deletepatternspace.Startnextcycle.观察命令结果:sed-e'd'express删除指定行:sed-e'1d'express地址范围:sed-e'1,10d'express从一行开始每隔一行删一行:sed‘0~1d’express从第二行开始每隔7行删一行:sed‘1~7d’expresssed-删除功能带规则表达式的地址删除注释行:sed-e'/^#/d'/etc/services|more删除空行:sed-e'/^$/d'express删除第一行到空行:sed-e'1,/^$/d'express删除最后一行:sed-e'$d'express删除包含apple的行到包含Her的行:sed-e'/apple/,/Her/d'expresssed-打印功能‘p’:打印命令注意观测下面两个命令的区别:sed-n'1p'expresssed'1p'express-n安静模式练习题打印tot文件中从包含BEGIN的行开始,并且以包含END的行结束的文本块:思考:1如果文件中没有“BEGIN”会怎样?2如果文件中没有“END”会怎样?练习题只打印C源文件中的main()函数练习题删除tot文件中从BEGIN开到END结束的块中包含Name的行sed'/^BEGIN/,/^END/{/Name/d;}'totsed功能:替换's/{oldvalue}/{newvalue}/'实例:$echomynameiszsh|sed's/zsh/shz/'多次修改1使用–e选项实例:$echomynameiszsh|sed-e's/is/are/'-e's/zsh/shz/'$多次修改2用分号来分隔命令实例:$echomynameiszsh|sed's/is/are/;s/zsh/shz/'注意分号必须是紧跟斜线之后的下一个字符全局替换gsed默认处理每一行中出现的第一个选定序列,如果要处理出现的每一个项目,使用g实例:$echomynameiszshzsh|sed's/zsh/shz/g'替换每行第N个匹配$echomynameiszshzsh|sed's/zsh/shz/1'$echomynameiszshzsh|sed's/zsh/shz/2'练习题catmyfile.htmlbThis/biswhatbI/bmeant.删除HTML标记,也就是要得到:ThisiswhatImeant.sed替换功能案例用sed实现unix2dos命令功能unix2dosexpresscat-vexpresssed-i's/.$//'express思考,怎样用sed命令将unix格式文件转换成dos格式?案例案例:老大要求我替换一个大容量文件(大约6-7G)的某些信息,直接用vim打开手动编辑的话那速度简直是苦不堪言,于是我再次想到了awk。仅仅是一些替换工作就用awk太小题大做了,而且在我用awk处理的时候出了一个大问题:文件太大,awk无法打开,我没有对这样的异常做防御,导致后面的操作出现了一连串的问题,最终的结果就是我用了一个空文本替换了刚才那个6-7G的文件。幸好还有备份,汗!。正在我。。。。,老大已经搞好了,就是用了一行sed:sed-iXXX-e's/XXX/XXX/g'y命令y是一个管局命令,拒绝使用后缀flag/gsed'y/1234567890/abcdefghij/'sedyn/N命令nNRead/appendthenextlineofinputintothepatternspace.打印奇数行:cat-nexpress|sed-n'p;n'打印偶数行:cat-nexpress|sed-n'n;p'思考下面的功能:cat-nexpress|sed-n'p;N'cat-nexpress|sed-n'N;p'cat-nexpress|sed-n'p;d'cat-nexpress|sed'd;n'cat-nexpress|sed'n;d'cat-nexpress|sed'1d;n;d'案例输出匹配行的下一行sed-n'/apple/{n;p}'express区别:sed-n'/apple/n;p'expresssed更多功能h:拷贝模板块的内容到内存中的缓冲区。H:追加模板块的内容到内存中的缓冲区g:获得内存缓冲区的内容并替代当前模板块中的文本。G:获得内存缓冲区的内容并追加到当前模板块文本的后面=:出行号x:互换模板块中的文本和缓冲区中的文本。案例为文件加行号sed=express|sed'N;s/\n/:/'给非空行加行号sed'/./='express|sed'/./N;s/\n/:/'案例删除连续重复行sed'$!N;/^\(.*\)\n\1$/!P;D'chongfu案例用sed实现tac功能sed-e'1!G;h;$!d'express案例从字串中解析出两个子串(前2各字符和后9个字符)echoWeLoveChinaUnix|sed-e'H;s/\(..\).*/\1/;x;s/.*\(.\{9\}\)$/\1/;x;G;s/\n//'备注:该例仅仅说明各种命令的功能,如果单纯为了完成任务,以下命令更简单:echoWeLoveChinaUnix|sed's/^\(..\).*\(.\{9\}\)$/\1\2/'案例观测脚本ip的内容并分析其功能注意观察ifconfigifconfig|./ip练习题文件a的内容如下:1234567执行sed'N;$!D'a结果?保存输出文件$sed'/two/s/1/2/`sample_onesample_two直接修改原文件:-ised-i'$d'express脚本文件$catsedlist/two/s/1/2//three/s/1/3/注意当调用-f选项时,在源文件内或命令行中不使用撇号$sed-fsedlistsample_oneone1two2three3one1two2two2three3$“-f”选项Sed功能3:增加和插入文本$sed'$a\Thisiswherewestop\thetest'sample_oneone1two1three1one1two1two1three1Thisiswherewestopthetest$注意:美元符号($)表示文本将被添加到文件的末尾。反斜线(\)是必需的,它表示将插入一个回车符。Sed功能3:增加和插入文本$sed'3a\Thisiswherewestop\thetest'sample_oneone1two1three1Thisiswherewestopthetestone1two1two1three1$Sed功能3:增加和插入文本$sed'3i\Thisiswherewestop\thetest'sample_oneone1two1Thisiswherewestopthetestthree1one1two1two1three1$添加和插入的区别:添加跟在指定的行之后,而插入从指定的行开始读写文件$sed'/two/s/1/2//three/s/1/3/1,3wsample_three'sample_oneone1two2three3one1two2two2three3$$catsample_threeone1two2three3$修改命令替换是对字符逐个进行,而修改功能与删除类似,它影响整行:$sed'/two/cWearenolongerusingtwo'sample_one提前退出$sed'/two/s/1/2//three/s/1/3/5q'sample_oneone1two2three3one1two2$$sed'/two/s/1/2//three/s/1/3//three/q'sample_oneone1two2three3$提前退出思考:sed110qfilename有什么作用?cutcut-d分隔字元[-cf]fields參數說明:-d:後面接的是用來分隔的字元,預設是『空白字元』在用cut从文件中析取字段时,如果没有指定分隔符,默认
本文标题:linux正则表达式
链接地址:https://www.777doc.com/doc-5135494 .html