您的位置:首页 > 其它

grep技巧 转载

2013-12-19 22:22 375 查看
一、grep简介以及命令参数选项二、正则表达式简介及元字符、字符集合三、grep及正则表达式实例---------------------------------------------------------------[b]----------------------------------------------------[/b]grep 简介 grep : global search regular expression=\'#\'" ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。 grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。 grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。grep 命令:格式:grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]【选项与参数】(这里只介绍比较常用的选项,想了解更多请使用man grep查看)--color=auto:高亮显示匹配到的字符串;-v --invert-match:反向选取,只显示不符号模式的行;-o --only-matching:只显示被模式匹配到的字串,而不是整个行;-i --ignore-case:不区分字符大小写;-l --files-with-matches:只列出匹配的文件名;-L --files-without-matches:只列出不匹配的文件名;-w --word-regexp:匹配完整字符串(单词),而不是匹配部分字符串;-A NUM:显示匹配到的行,并显示其后面的NUM行;-B NUM:显示匹配到的行,并显示其前面的NUM行;-C NUM:显示匹配到的行,并显示其前、后面的NUM行;-E --extended-regexp:支持扩展正则表达式;正则表达式简介 任何一个有经验的系统管理员,都会告诉你:正则表达式真是挺重要的!为什么很重要呢?因为日常生活就使用得到。举个例子来说,在你日常使用vim做文字处理或编写程序时使用到的查找、替换等功能,这些举动要做得漂亮,就得要配合正则表达式来处理! 简单的说,正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式一般通过一些特殊符号的辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序。正则表达式包括:基本正则表达式,扩展正则表达式;
基本正则表达式:贪婪模式(尽可能长地去匹配符合模式的内容)
元字符:^:锚定行首的符合条件的内容,用法格式“^pattern”;$:锚定行尾的符合条件的内容,用法格式“pattern$”;.:匹配任意单个字符;*:匹配紧挨在其前面的字符任意次;.*:匹配任意长度的任意字符;[]:匹配包含内的任一字单个字符;[^]:匹配包含外的任一字单个字符;\:将下一字符标记为特殊字符、文本、反向引用或八进制转义符;\?:匹配紧挨在其前面的字符0次或1次;\<:锚定词首\>:锚定词尾x\{m\}:匹配其前面的字符“x”m次(精确匹配);x\{m,\}:匹配其前面的字符“x”至少m次;x\{m,n\}:匹配其前面的字符“x”至少m次,至多n次;\(\):分组;
字符集合:[:lower:]:代表小写字母,即 a-z[:upper:]:代表大写字母,即 A-Z[:digit:]:代表数字,即 0-9[:alpha:]:代表任何英文大小写字母,即 a-z A-Z[:alnum:]:代表英文大小字符及数字,即 0-9 a-z A-Z[:space:]:代表空格键与Tab按键[:punct:]:代表标点符号,即 “ , ;? ! : # $
grep及正则表达式实例:  通过以上对grep命令、正则表达式、元字符、字符集合的简单介绍,下面我们来举些例子,让大家更好的了解grep命令及正则表达式的基本使用,并更好的了解命令的参数 、选项,正则表达式的元字符及字符集合的意义:例一:在/etc/passwd文件中查找匹配root的串,并以高亮显示其匹配的字符串。


--color=auto 可将正确匹配的字符串以高亮红色显示。
例二:在/etc/passwd文件中查找以root开头的行,并将其显示。


通过行首锚定符进行匹配,可以看出此次匹配的内容仅是以root开头的行。在其它位置出现不匹配。
例三:在/etc/passwd文件中查找以/bin/bash结尾的行,并将其显示。


通过行尾锚定符进行匹配,可以看出此次匹配的内容仅是以/bin/bash结尾的行。
例四:在/etc/passwd文件中查找匹配ftp的行。


大家注意到没有,此行还包含一个大写“FTP”字符串,这里没有匹配出来,从这个例子中可以看出,grep命令进行字符匹配是区分大小写字母的。
例五:在/etc/passwd文件中查找匹配ftp的行。不区分大小写。


大家看看和上一个命令的区别,就很容易发现,通过-i参数,不区分大小写进行匹配,所以大、小写的ftp都匹配出来了。
例六:在/etc/passwd文件中查找匹配bin的字符串,要完全匹配,不能匹配类似sbin的字串。


通过词首"\<"、词尾"\>"锚定符进行字符串完全匹配。如果不使用词首词尾锚定符,会将类似/sbin字串一起匹配出来。
例七:在/etc/passwd文件中查找匹配两个ftp之间包含任意字符的行。


ftp字符串以分组方式进行匹配,大家注意到命令中的\1,表示引用第一个分组的内容,如果字符串中有多个分组,可以用\2 \3进行引用第二分组及第三分组中的字符串。
例八:在/etc/passwd文件中查找匹配o,并且至少出现2次的字符串的行。


\{2,\} 匹配前面字符至少2次,表示o字符最少必须连续出现两次或三次或更多次,例:rooot 、spoooot、toooools等。
例九:显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行。




例十:显示/etc/rc.d/rc.sysinit文件中的内容,并不显示以#号开头的行和空白行。




例十一:显示IPV4的地址信息的行,排除lo回环地址。






例十二:找出ifconfig不包含回环地址的其它IP地址,不包括IP广播地址和子网掩码等信息。




这个看起来真是有些头痛 ,不过多看几遍就好了,我们分解一下在看看是不是就容易很多了。"\<([1-9]| :1-9[1-9][0-9]| :10-991[0-1]+[0-9]+| :100-19912[^7]+| :120-129 排除1271[3-9]+[0-9]| :130-1392[01][0-9]| :200-21922[0-3])\> :220-223(\.\<([0-9]| :0-9[1-9][0-9]| :10-991[0-9][0-9]| :100-1992[0-4][0-9]| :200-24925[0-4])\>):250-254{2} 精确匹配前面分组2次\.\<([1-9]| :1-9[1-9][0-9]| :10-991[0-9][0-9]| :100-1992[0-4][0-9]| :200-24925[0-4])\>" :250-254
Linux grep 命令功能、正则表达式先简单介绍到这里了,希望对大家有所帮忙,本篇博文后续还会继续更新,后续更新主要以实例为主。希望大家关注啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息