整理一下grep常用操作,就当记笔记啦
一、介绍
grep是Linux中最常用的"文本处理工具"之一,全称是Global Regular Expression Print,结合正则表达式,功能超级强大
二、使用格式
Usage: grep [OPTION]... PATTERN [FILE]... (grep --help提示)
option:grep 使用参数
pattern:正则表达式
三、常用参数
-o:只显示符合条件的字符串,每个符合条件的字符串单独显示一行
-P:表示使用兼容perl的正则引擎(个人超级喜欢用)
-r: 递归查找
-i:忽略大小写
-n:显示结果所在行号
-c:统计匹配到的行数
-v:输出不带关键字的行
-w:匹配整个单词
-A(B/C)x:在输出的时候包含结果所在行之后(前/前后)的指定行数
A:after,B: before, C:context/center
注:Cx 中 C可以省略
-e:实现多个选项的匹配
-f:指定规则文件
-l(L):查询多文件时只输出包含(不)匹配字符的文件名。
-d: skip 忽略子目录
四:应用实例
新建文档tmp.txt,内容如下
- 最基本用法
grep 'name' tmp.txt
- -i:忽略大小写
想把Name 这一行也搜索出来 :grep -i 'name' tmp.txt
- -c:统计匹配到的行数
grep -ic 'name' tmp.txt
- -n:显示结果所在行号
grep -in 'name' tmp.txt
- -o :只显示符合条件的字符串,每个符合条件的字符串单独显示一行
grep -ino 'name' tmp.txt
- -A(B/C)x:在输出的时候包含结果所在行之后(前/前后)的指定行数
grep -iA2 'name' tmp.txt
- -w:匹配整个单词
grep -iw 'hanli' tmp.txt
(hanlilaopo不是一个单词,所以此行没grep出来)
- -v:输出不带关键字的行(反向查询,反向匹配)
grep -v 'nangongwan' tmp.txt
- -e:匹配多个选项
grep -e 'addr' -e 'Addr' tmp.txt
- -P:表示使用兼容perl的正则引擎 (个人非常喜欢的一个,重点)
grep -P '(a|A)ddr' tmp.txt(跟前面效果一样)
小例子:
1)查找自己java进程:
ps -ef | grep -i java| grep -v 'grep'
ps -ef | grep -i [j]ava
下面一个命令取了个巧,朋友们能看出来吗。。。
2)过滤掉空行:
grep -vP '^$' filename
grep "." filename
上面一个更通用,因为正则表达式还能改成过滤空格(注释)之类的
3)有时候你写过一个脚本,但是记不住了,只记得零星内容,就可以使用递归查找:
grep -r "记得的内容" .
4)查看日志,只关注特定关键词的行:
tail -f xxx.log | grep -i 'aaaa'
5)统计一段时间内 日志中出现次数
grep -i 'aaa' xxx.log | wc -l
grep -ic 'aaa' xxx.log
grep 强大远超我们的想象,配合正则表达式,能发挥出想象不到的威能,具体的功能还需要大家一起摸索呀。。。