Owen的酒楼

--酒楼上渡过的人生--
生命太短,人生太长,但愿别喝醉了。

导航

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

Posted on 2007-09-13 15:47  Hicome  阅读(362)  评论(0编辑  收藏  举报
当我们要查找文件中某些内容,或者在显示文件名时过滤出某一种类的文件,这时就需要用到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'