当我们要查找文件中某些内容,或者在显示文件名时过滤出某一种类的文件,这时就需要用到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'
一、常用命令
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'