
01为什么一次要找多个字符串
在日常运维或排查日志时,“同时出现多个关键词”往往才是问题真正的线索。手动分次搜索再对比结果,既耗时又容易遗漏上下文。掌握 grep 的多模式搜索技巧,就能让命令行一次性给出所有匹配行,效率立竿见影。
02grep 的三种正则引擎
grep 默认使用 Basic 正则表达式(BRE),但通过 -E 或 --extended-regexp 可以切换到 扩展正则表达式(ERE),后者在书写上更简洁,尤其是 OR 运算符 | 不再需要转义。
对于更复杂的模式,还可以用 -P 或 --perl-regexp 启用 Perl 兼容正则表达式(PCRE),它拥有最多的特性集,但性能略低。
优先级提示:在所有正则运算符里,| 的优先级最低,因此不需要额外分组符号。
03多模式搜索的基本语法
3.1 > 使用 BRE(无需转义)```bash
grep 'pattern1\|pattern2' filename
```
注意:必须把整个表达式用单引号括起来,防止 shell 先行替换。
3.2 > 使用 ERE(免转义)```bash
grep -E 'pattern1|pattern2' filename
```
此时 | 可以直接写,无需反斜杠。
04实战示例:从日志里揪出错误关键词
4.1 > 基本用法假设 nginx 错误日志里同时出现 fatal、error 或 critical 时,才值得关注:
```bash
grep 'fatal\|error\|critical' /var/log/nginx/error.log
```
4.2 > 加空格也能搜若关键词本身含空格,记得用双引号包围:
```bash
grep -E 'error message' /var/log/nginx/error.log
```
4.3 > 不区分大小写日志轮转后大小写可能混写,加 -i 即可忽略大小写:
```bash
grep -i 'Fatal|ERROR|CRITICAL' /var/log/nginx/error.log
```
4.4 > 只匹配整词默认情况下,error 会被 errorless、antiterrorists 等误匹配。用 -w 只匹配完整单词:
```bash
grep -w 'fatal|error|critical' /var/log/nginx/error.log
```
单词字符默认包括字母、数字、下划线,其余均视为分隔符。
05小结与拓展思路
一次搜索多个关键词,可大幅缩小排查范围。
BRE 与 ERE 的选择取决于你是否愿意写反斜杠;若模式复杂,直接 -E 更省事。
大小写敏感(默认)与 整词匹配(-w)是两个常用选项,别忘了它们。
grep 的功能远不止于此:结合管道、排序、去重等命令,还能玩出更高级的文本分析花样。下次遇到多关键词搜索,直接把这篇收藏起来,让 grep 一键搞定。
原创文章,作者:徐梓涵,如若转载,请注明出处:http://m.gaochengzhenxuan.com/news/12923.html