Linux常用命令学习笔记:egrep

1. 命令概述

  • 命令名称egrep(英文全拼:extended grep)
  • 核心功能:使用扩展正则表达式搜索文本
  • 主要用途:文本搜索、模式匹配、日志分析
  • 与 grep 的关系egrep= grep -E,支持扩展正则表达式

2. 语法格式

egrep [选项] 模式 文件...

3. 常用选项

选项说明
-i忽略大小写
-v反向匹配,显示不匹配的行
-n显示匹配行的行号
-c统计匹配行数
-l只显示包含匹配项的文件名
-L只显示不包含匹配项的文件名
-r递归搜索目录
-w匹配整个单词
-x匹配整行
-A n显示匹配行及后 n 行
-B n显示匹配行及前 n 行
-C n显示匹配行及前后各 n 行
--color高亮显示匹配内容
--help显示帮助信息
--version显示版本信息

4. 扩展正则表达式语法

元字符说明
+匹配前一个字符 1 次或多次
?匹配前一个字符 0 次或 1 次
\|或操作,匹配多个模式
()分组,将模式组合在一起
{}指定匹配次数
[]字符集,匹配方括号内的任意字符
[^]否定字符集,不匹配方括号内的字符
^匹配行首
$匹配行尾
.匹配任意单个字符
*匹配前一个字符 0 次或多次

5. 常用实例详解

(1) 基本搜索

# 搜索包含"error"的行
egrep 'error' file.log

# 搜索包含"error"或"warning"的行
egrep 'error|warning' file.log

# 搜索以"error"开头的行
egrep '^error' file.log

# 搜索以"error"结尾的行
egrep 'error$' file.log

# 搜索包含"error"的行,忽略大小写
egrep -i 'error' file.log

(2) 字符集匹配

# 搜索包含数字的行
egrep '[0-9]' file.txt

# 搜索包含小写字母的行
egrep '[a-z]' file.txt

# 搜索包含大写字母的行
egrep '[A-Z]' file.txt

# 搜索包含字母或数字的行
egrep '[a-zA-Z0-9]' file.txt

# 搜索不包含数字的行
egrep '[^0-9]' file.txt

(3) 重复匹配

# 搜索包含至少一个数字的行
egrep '[0-9]+' file.txt

# 搜索包含0个或多个数字的行
egrep '[0-9]*' file.txt

# 搜索包含0个或1个数字的行
egrep '[0-9]?' file.txt

# 搜索包含3个数字的行
egrep '[0-9]{3}' file.txt

# 搜索包含3到5个数字的行
egrep '[0-9]{3,5}' file.txt

(4) 分组和或操作

# 搜索包含"error"或"warning"的行
egrep 'error|warning' file.log

# 搜索包含"error"或"Error"的行
egrep '(E|e)rror' file.log

# 搜索包含"http"或"https"的行
egrep 'http(s)?' file.log

# 搜索包含"color"或"colour"的行
egrep 'colou?r' file.log

6. 实际应用场景

场景一:日志分析

# 查找错误日志
egrep 'ERROR|FATAL' app.log

# 查找特定时间段的日志
egrep '2023-12-19 1[0-9]:' access.log

# 查找IP地址
egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log

# 查找HTTP状态码
egrep ' [2-5][0-9]{2} ' access.log

# 查找404错误
egrep ' 404 ' access.log

场景二:配置文件搜索

# 查找配置文件中的配置项
egrep '^[^#]' nginx.conf  # 查找非注释行

# 查找包含"server"的配置块
egrep -A 5 -B 5 'server {' nginx.conf

# 查找所有监听的端口
egrep 'listen [0-9]+;' nginx.conf

# 查找所有server_name
egrep 'server_name .*;' nginx.conf

场景三:代码搜索

# 递归搜索目录中的Python文件
egrep -r 'def ' *.py

# 搜索函数调用
egrep -r 'function_name\(' src/

# 搜索TODO注释
egrep -r 'TODO|FIXME' src/

# 搜索import语句
egrep -r '^import ' *.py

# 搜索类定义
egrep -r '^class ' *.py

场景四:系统监控

# 查看系统进程
ps aux | egrep 'nginx|apache'

# 查看网络连接
netstat -tuln | egrep ':[0-9]+'

# 查看磁盘使用情况
df -h | egrep '[0-9]%'

# 查看内存使用情况
free -h | egrep 'Mem|Swap'

# 查看系统负载
uptime | egrep -o 'load average: [0-9.]+'

7. 与其他命令的区别

命令特点适用场景
egrep扩展正则表达式,支持 \|+?()复杂模式匹配
grep基本正则表达式,不支持扩展元字符简单模式匹配
fgrep固定字符串,不支持正则表达式快速固定字符串搜索
rgrep递归搜索目录目录搜索
ag更快的搜索工具代码搜索

8. 注意事项

  1. 正则表达式egrep使用扩展正则表达式,支持更多元字符
  2. 特殊字符|+?()等字符需要转义或使用单引号
  3. 性能优化:使用更精确的模式可以提高搜索速度
  4. 递归搜索:使用 -r选项递归搜索目录
  5. 输出控制:使用 -l-c-n等选项控制输出格式

9. 常见问题解决

(1) 特殊字符转义

# 搜索包含"+"的行
egrep '\+' file.txt

# 搜索包含"|"的行
egrep '\|' file.txt

# 搜索包含"?"的行
egrep '\?' file.txt

# 搜索包含"()"的行
egrep '\(\)' file.txt

(2) 性能优化

# 使用更精确的模式
egrep '^error:' file.log  # 比 'error' 更快

# 使用单词边界
egrep -w 'error' file.log  # 只匹配整个单词

# 使用整行匹配
egrep -x 'error' file.log  # 只匹配整行

(3) 大文件处理

# 使用管道分页查看
egrep 'pattern' largefile.log | less

# 只显示匹配行数
egrep -c 'pattern' largefile.log

# 只显示文件名
egrep -l 'pattern' *.log

(4) 多文件搜索

# 搜索多个文件
egrep 'pattern' file1.txt file2.txt file3.txt

# 搜索所有文本文件
egrep 'pattern' *.txt

# 递归搜索目录
egrep -r 'pattern' /path/to/dir

# 排除某些文件
egrep -r --exclude='*.log' 'pattern' /path/to/dir

核心要点总结

  • egrepgrep -E的别名,支持扩展正则表达式
  • 扩展正则表达式:支持 |+?(){}等元字符
  • 常用选项-i(忽略大小写)、-v(反向匹配)、-n(显示行号)、-r(递归搜索)
  • 实际应用:日志分析、配置文件搜索、代码搜索、系统监控
  • 性能优化:使用更精确的模式、单词边界、整行匹配
  • 注意事项:特殊字符需要转义,使用单引号包裹模式

egrep命令是文本搜索的利器,熟练掌握可以大大提高文本处理效率。


作 者:南烛
链 接:https://www.itnotes.top/archives/347
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇