Linux下的文本过滤神器-grep

1. grep简介

grep是Linux中用来过滤文本文件内容的命令,使用该命令能够高效的从文本信息中过滤出符合条件的文件行。

grep 与 awk 、sed并称为linux下文本处理三剑客,grep用于过滤文本信息,sed用于动态编辑文本,awk用于格式化输出文本。

2. 命令格式

第一种用法:从已存在文件中过滤并输出文本信息

grep [选项] [表达式] [文件路径]...

第二种用法:过滤管道中获取到的文本信息

otherCommand | grep [选项] [表达式]

3. 可用选项

选项 含义
-v 反向过滤,不展示过滤项信息
-i 过滤时忽略大小写
-n 显示行号(显示的是文本中的行号)
-r 递归搜索,传递文件路径是文件夹时,递归处理下面所有符合条件的所有文本
-E 支持扩展后的正则表达式,加上 -E参数后,实际等同于egrep命令
-F 不按正则表达式进行匹配,按照字符串字面进行匹配
-c 只展示匹配到的总行数
-w 匹配整词,词语间以空格划分
-x 匹配整行,行之间以换行符划分
-l 只显示匹配到的文件名称,不显示内容
-s 不显示错误信息

4. 场景实操

# 过滤tmpfile1、tmpfile2中包含login字符的行
grep login tmpfile1 tmpfile2

# 过滤tmpfile开头的文件中,包含login字符(忽略大小写)的行
grep -i login tmpfile*

# 过滤出以log结尾的文件中,不包含debug字符的行,反向过滤
grep -v debug *.log

# 过滤出以log结尾的文件中,包含login字符(忽略大小写)的行,并打印出行号
grep -i -n login *.log

# 扩展正则表达式的支持,同时匹配 login、debug两个关键字,不加-E的话,不支持扩展表达式
grep -E 'login|debug' *.log

# 非正则表达式匹配,过滤出以log结尾的文件中,包含 debug.* 字符的行
grep -F 'debug.*' *.log

# 过滤 /log下文件中所有文件中包含 error的行
grep -r 'error' /log/

# 只输出以log结尾的文件中,包含error字符的行数
grep -c error *.log

# 匹配log结尾的文件中,包含login单词的行,login匹配到,不匹配loginInfo等
grep -w login *.log

# 匹配log结尾的文件中,等于love的行,整行匹配
grep -x love *.log

# 实时打印以log结尾的日志文件,过滤包含关键词error的行
tail -f *.log | grep error

你可能感兴趣的:(Linux下的文本过滤神器-grep)