您的位置:首页 > 运维架构 > Linux

[linux常用命令] 2、强大的搜索指令grep (转)

2007-09-13 15:47 801 查看
当我们要查找文件中某些内容,或者在显示文件名时过滤出某一种类的文件,这时就需要用到grep。因为支持正则表达式,使得grep命令的搜索功能非常强大,它是使用好linux必须掌握的一个命令。

一、常用命令

grep 999 **/* 列出当前目录(包括子目录)中所有含有999字符的行。

grep '999' server.log 列出server.log中含有999字符的行。将999去掉引号或换成双引号,效果一样。

grep -c '999' server* 统计所有以server开头的文件中,含有999字符的行数(注:不是个数)

grep '999' aa.txt bb.txt cc.txt 显示aa.txt, bb.txt, cc.txt三文件中含有999字符的行。

grep '[a-z]\{5\}' server.log 利用正则表达式来搜索文件。正则表达式的详细说明见后面。

grep '2006-08-23 17:50:[0-1][0-9]' wxxr.boss.log 搜索某日某分00秒到19秒之间的日志

ls | grep 'server' 这里是在通道里来使用grep,将ls显示的文件名,过滤出含有server字符的文件名。

二、参数

-2 匹配行上下2行也显示出来

-b 在行之前显示此行所在的字符号(字符号指:在此之前字符的字符数)

-c 匹配行的行数

-f 从某文件中提取要匹配的字符,如:grep -f abc server.log从abc文件中提取要搜索的字符

  (注:abc中可以有多行,每行是"或"的关系,即列出各行字符所匹配的内容。所有匹配行按照其在文件中的顺序显示,即不按abc中的匹配字符来分类显示)

-h 当搜索多个文件时,不显示每行之前的文件名前缀。

-i 忽略搜索字符的大小写

-l 显示匹配搜索字符的文件的文件名

-L 显示不匹配搜索字符的文件的文件名

-n 在每行前加上行号

-s 不显示关于不存在或者无法读取文件的错误信息。

-v 显示所有不匹配的行。

-w 把搜索字符当作一个完整单词来匹配

三、正则表达式

^jboss 匹配所有以jboss开头的行

jboss$ 匹配所有以jboss结尾的行

jbo.s .表示任意一字符,匹配jboss, jbo7s,不匹配jbos。

jbo*s *表示0或多个的前一字符,匹配jbs, jbos, jboos, jboooos

jbo[sa]s [] 指定字符范围,匹配jboss, jboas

jbo[^sb]s [^]指定不允许匹配的字符范围,不匹配jboss, jbobs

x\{2\} 匹配2个x字符,即匹配字符xx

x\{2,\} 至少匹配2个x字符

x\{2,4\} 匹配2-4个x

\w 匹配文字和数字字符,和[A-Za-z0-9]等价

\W 与\w相反,匹配一个或多个非文字和非数字字符,如点号句号等。

\bjboss 匹配单词,如jboss, jboss888,但不匹配8jboss。也就是jboss之前必须是空格或逗句号等。

[0-9]{11} 11个数字

四、egrep(等价于grep -E)扩展支持的正则表达式

c+ 匹配一个或多个c字符。[a-c]+,则匹配一个或多个a或b或c字符。

c? 匹配零个或多个c字符

a|b 匹配a或b

() 分组符号,作用类似算术里的()

x{2},x{2,},x{2,4} 作用等同于没有用-E参数时的x\{2\},x\{2,\},x\{2,4\}

五、fgrep(等价于grep -F)

当搜索字符里包含有正则表达式的专用符号,然而我们却不想启用正则表达式,就是搜索原字符,这时就可以用grep -F。例:grep -F 'jbo[^sb]s' server.log ,搜索server.log里包含'jbo[^sb]s的字符(^[]不再是正则表达式里的专用字符)

六、其他

和其他命令相结合,可把grep用作一个过滤器。比如我们监控日志时,我们只关心某一个包下的日志,这时我们可以这样来写:tail -f server.log | grep 'com.wxxr.chengang'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: