一、命令简介
egrep(Extended Global Regular Expression Print)是一个在文件中查找指定字符串或模式的命令行工具。它是 grep 命令的扩展版本,使用扩展正则表达式(Extended Regular Expression,ERE)语法进行模式匹配。
核心特点:
- 支持更丰富的正则表达式元字符(如 +、?、|、() 等)而无需转义。
- 执行效果等同于 grep -E。
- 通常用于匹配更复杂的文本模式。
注意:在现代 Linux 系统中,egrep 已被视为已弃用(deprecated),官方推荐使用 grep -E 替代。但大多数系统仍保留此命令以保持向后兼容。
二、语法格式
bash
运行
egrep [选项] <查找模式> [文件名1] [文件名2] ...参数说明:
- 选项:控制匹配行为的各种标志。
- 查找模式:要搜索的字符串或正则表达式。
- 文件名:要搜索的一个或多个文件。如果省略文件名或使用 -,则从标准输入读取。
三、常用选项及说明
表格
| 选项 | 说明 |
|---|---|
| -i | 忽略大小写(case-insensitive)。 |
| -v | 反向匹配,显示不包含模式的行。 |
| -n | 显示匹配行的行号。 |
| -c | 只显示匹配行的计数,不显示具体内容。 |
| -l | 只显示包含匹配项的文件名,不显示具体行。 |
| -L | 只显示不包含匹配项的文件名。 |
| -r 或 -R | 递归搜索子目录。 |
| -w | 匹配整个单词(word-regexp)。 |
| -x | 匹配整行(line-regexp)。 |
| -A <数字> | 显示匹配行及其后指定行数的内容。 |
| -B <数字> | 显示匹配行及其前指定行数的内容。 |
| -C <数字> | 显示匹配行及其前后指定行数的内容。 |
| -e <模式> | 指定多个模式之一。 |
| -f <文件> | 从文件中读取模式列表。 |
| -q | 安静模式,不输出任何内容(用于条件判断)。 |
| -s | 不显示错误信息(静默模式)。 |
| --color | 高亮显示匹配的文本。 |
四、示例用法
示例 1:基本搜索
在当前目录所有文件中搜索 "error" 字符串:
bash
运行
egrep "error" *示例 2:忽略大小写搜索
搜索 "linux" 或 "Linux" 或 "LINUX":
bash
运行
egrep -i "linux" file.txt示例 3:显示行号
搜索并显示匹配行的行号:
bash
运行
egrep -n "pattern" file.txt示例 4:递归搜索
在当前目录及所有子目录中搜索:
bash
运行
egrep -r "TODO" .示例 5:使用扩展正则表达式特性
搜索 "error" 或 "warning":
bash
运行
egrep "error|warning" logfile.txt搜索至少有一个数字的行:
bash
运行
egrep "[0-9]+" file.txt示例 6:过滤注释行和空白行
过滤掉以 # 开头的注释行和空白行:
bash
运行
egrep -v '^\s*(#|$)' config.conf示例 7:上下文显示
显示匹配行及其前后各 2 行:
bash
运行
egrep -C 2 "critical" server.log示例 8:从多个文件中搜索
在多个类型的文件中搜索:
bash
运行
egrep "function" *.js *.ts示例 9:使用多个模式
搜索多个可能的关键词:
bash
运行
egrep -e "error" -e "fail" -e "timeout" app.log示例 10:统计匹配数量
仅统计匹配行数:
bash
运行
egrep -c "success" results.txt五、注意事项
兼容性说明
- egrep 在 POSIX 标准中已被标记为 “已弃用”。
- 建议在新脚本中使用 grep -E 替代 egrep。
- 两者功能完全相同,egrep 只是 grep -E 的别名。
正则表达式差异
- egrep 使用扩展正则表达式(ERE)。
- 普通 grep 使用基本正则表达式(BRE)。
- ERE 中以下字符有特殊含义且无需转义:?、+、{、}、|、(、)。
- 在 BRE 中这些字符需要转义才能表示特殊含义。
特殊字符处理
- 当模式中包含 shell 特殊字符时,使用单引号包裹。
- 需要变量替换时使用双引号。
bash
运行
# 正确:使用单引号避免 shell 解释特殊字符 egrep '^[A-Z]' file.txt # 需要变量时使用双引号 pattern="error" egrep "$pattern" file.txt性能考虑
- 对于大文件,复杂的正则表达式可能影响性能。
- 使用 -F(固定字符串)选项可提高简单字符串搜索的速度。
返回值
- 找到匹配项时返回 0。
- 未找到匹配项时返回 1。
- 发生错误时返回 2。