grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep, egrep和fgrep是grep的扩展,与Windows下命令 findstr 类似。
命令格式: grep string filename
--color 同—color=auto 高亮显示匹配到的字符串,也可使用别名alias实现,alias grep=‘grep --color=auto’
-v --revert-match,反向查询,即输出没有匹配到的字符串
-i --ignore-case,忽略大小写
-n --line-number,在匹配到的内容前显示行号
-c --count,匹配到字符串的行数(注意:不是匹配到的次数)
-o grep默认输出匹配到字符串所在行的全部内容,-o选项仅显示匹配到的字符串
每个匹配到的字符串都会显示为一行,即若在一行中匹配到n个字符串,会输出n行字符串(每行一个字符串)(用于统计字符串出现在文本中的次数)
-w 完全匹配整个单词,不匹配含有字符串的单词,例如 magic 不匹配会 magical
-a 把二进制文件当做文本处理
-An(after) 显示匹配字符串及其后n行数据
-Bn(before) 显示匹配字符串及其前n行数据
-Cn(context) 显示匹配到的字符串及其前后n行
例:
grep 'linux' test.txt test2.txt //从多个文件中查找linux
多文件查询时,会把文件名在行首输出,并且加上":"作为标示符。
例:
find . -name ".log" | grep -i error | grep -vi "info"
1、使用find -name 来列出所有log文件,重定向给grep
2、使用grep -i 来查找包含error的行
3、使用grep -vi 来查找不包含info的行
egrep与grep -E
grep 过滤多个条件
错误写法:
netstat -an|grep "ESTABLISHED|WAIT" //默认grep不支持多条件匹配
正确写法:
netstat -an|grep -E "ESTABLISHED|WAIT" //grep -E 并将条件用""包起来,条件之间用“|”管道符分开
grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename // 用egrep同样可以实现
awk '/123|abc/' filename // awk 的实现方式
与 & 或 | 非 !