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 -E,egrep已被标记为废弃。
三、基本正则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计数。