grep是UNIX和LINUX中使用最普遍的命令之一
grep容许对文本文件进行模式查找。若是找到匹配模式,grep打印包含模式的全部行。grep支持基本正
则表达式,也支持其扩展集。
测试文件datafile,以下git
1.grep通常格式为:
grep[选项]基本正则表达式[文件]
这里基本正则表达式可为字符串。
2.在grep命令中输入字符串参数时,最好将其用双引号括起来。
一是以防被误解为shell命令
二是能够用来查找多个单词组成的字符串
在调用变量时,也应该使用双引号
3.grep经常使用选项
经常使用的grep选项有:
-c只输出匹配行的计数。
-i不区分大小写(只适用于单字符)。
-h查询多文件时不显示文件名。
-l查询多文件时只输出包含匹配字符的文件名。
-n显示匹配行及行号。
-s不显示不存在或无匹配文本的错误信息。
-v显示不包含匹配文本的全部行。
4.grep和正则表达式
使用正则表达式使模式匹配加入一些规则,所以能够在抽取信息中加入更多选择。使用
正则表达式时最好用单引号括起来,这样能够防止 grep中使用的专有模式与一些 shell命令的
特殊方式相混淆。
一、模式范围
抽取代码为4 8 4和4 8 3
#grep '48[34]' datafile
二、不匹配行首
抽出记录,使其行首不是4 8
#grep '^[^48]' datafile
三、设置大小写
使用- i开关,能够屏蔽大小写或者使用 [ ]模式
#grep '[Ss]ept' datafile
若是在知足上述条件的状况下还需知足必须包含483.则
#grep '[Ss]ept' datafile | grep 483
四、匹配任意字符
以L开头,以D结尾的全部代码
#grep 'K...D' datafile
头两个是大写字母,中间两个任意,并以 C结尾
#grep '[A-Z][A-Z]..C' datafile
五、日期查询
查询全部以 5开始以1996或1998结尾的全部记录
#grep '5..199[6,8]' datafile
六、范围组合
获取第一列代码
#grep '^[0-9][0-5][0-6]' datafile
七、模式出现机率
包含数字4至少重复出现两次的全部行
#grep '4\{2,\}' datafile
取记录使之包含数字999(三个9)
grep '9\{3,\}' datafile
查询重复出现次数必定的全部行,语法以下,数字 9重复出现两次
grep '9\{2\}' datafile
重复出现次数在必定范围内
匹配数字8重复出现2到6次,并以3结尾
#grep '6\{2,6\}3' datafile
八、使用grep匹配"与"或者"或"模式
grep命令加- E参数,这一扩展容许使用扩展模式匹配
获取代码为 219或216,
#grep -E '219|216' datafile
九、空行
结合使用^和$可查询空行。使用- n参数显示实际行数:
#grep '^$' datafile
十、匹配特殊字符
诸如$.'"*[]^|\+?,必须在特定字符前加\
#grep '\.' datafile
或者
#grep '\"' datafile
如要查询文件名controll.conf
#grep 'controll\.conf' /PATH/TO/SOME
十一、查询格式化文件名
在某目录中查找六个小写字符,后跟句点,接着是两个大写字符格式的文件
#grep '^[a-z]\{1,6\}\.[A-Z]\{2\}' /PATH/TO/SOME
十二、查询IP地址
#grep '[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}' ipfile
1三、类名
[[:upper:]][A-Z] [[:alnum:]][0-9a-zA-Z]
[[:lower:]][a-z] [[:space:]]空格或tab键
[[:digit:]][0-9] [[:alpha:]][a-zA-Z]
举例
查找以5开头,后跟至少两个大写字母。
#grep '5[[:upper:]][[:upper:]]' datafile
五、egrep
egrep表明expression或extendedgrep,适状况而定。egrep接受全部的正则表达式,egrep
的一个显著特性是能够以一个文件做为保存的字符串,而后将之传给egrep做为参数.
一、查看在系统中是否有账号louise、matty或pauline,
使用who命令并管道输出至egrep
who | egrep (louise|matty|pauline)
二、还可使用^符号排除字符串。若是要查看系统上的用户,但不包括 matty和pauline
who | egrep -v '^(matty|pauline)'
三、若是要查询一个文件列表,包括shutdown,shutdowns,reboot和reboots,使用egrep可容
易地实现
#egrep '(shutdown | reboot) (s)?' /PATH/TO/SOME正则表达式