grep 过滤“满足任一条件“(OR 逻辑)

📅 2026/7/8 6:06:40 👁️ 阅读次数 📝 编程学习
grep 过滤“满足任一条件“(OR 逻辑)

核心思路:用|(或)连接多个模式。有几种写法。

一、扩展正则grep -E(最常用)⭐

-E开启扩展正则,模式间用|分隔:

grep -E "条件1|条件2|条件3" file.txt

例子:

# 匹配含 error 或 warning 或 fail 的行 grep -E "error|warning|fail" log.txt

|在扩展正则里表示"或",只要一行满足任意一个就被选出。

二、egrep(等价,老写法)

egrep=grep -E

egrep "error|warning|fail" log.txt

新系统建议用grep -Eegrep已被标记为废弃。

三、基本正则grep(要转义|

不加-E时,|需要转义成\|

grep "error\|warning\|fail" log.txt

写着麻烦,一般直接用-E更清晰。

四、grep -e多个模式

用多个-e指定多个模式,也是 OR 关系:

grep -e "error" -e "warning" -e "fail" log.txt

适合模式里本身含特殊字符、不想写正则时。

五、grep -f从文件读多个模式

模式很多时,写进一个文件(每行一个),用-f

# patterns.txt 每行一个关键词 grep -f patterns.txt log.txt

常用增强选项

grep -Ei "error|warning|fail" log.txt # -i 忽略大小写 grep -En "error|warning|fail" log.txt # -n 显示行号 grep -Ec "error|warning|fail" log.txt # -c 统计匹配行数 grep -Ew "err|warn" log.txt # -w 全词匹配 grep -Eo "error|warning|fail" log.txt # -o 只输出匹配部分 命令 | grep -E "error|warning" # 管道过滤命令输出

对比:AND(同时满足)怎么写

顺便说下"都满足"(AND)——不能直接用 grep 一个模式,常用管道串联:

# 同时包含 error 和 2024 的行 grep "error" log.txt | grep "2024"

实用例子

# 从进程列表找 chrome 或 code 或 wxwork(忽略大小写) ps -ef | grep -Ei "chrome|code|wxwork" # 日志里找多种错误级别并显示行号 grep -Ein "error|warn|fatal|exception" app.log # 统计满足任一关键词的行数 grep -Ec "PASS|FAIL|TIMEOUT" test.log

一句话总结

最推荐grep -E "条件1|条件2|条件3" 文件,用|表示"或",满足任一即匹配。也可用grep -e 模式1 -e 模式2(多模式)或grep -f 文件(模式很多时)。加-i忽略大小写、-n显示行号、-c计数。