grep 文本筛选:匹配、反选与退出状态验证
1. 用途介绍
grep 在文本文件或标准输入中筛选匹配行;-v 反选,输出不匹配的行。常用于日志排查、配置检查和脚本条件判断,不是网络服务。
2. 准备运行环境
Linux 终端及 grep,普通账号即可。只需对输入文件有读取权限,不需要 root 或联网。命令区分大小写,应输入 grep 而非 Grep。
3. 相关知识与注意点
• 默认模式是正则表达式;按字面字符串搜索使用 -F。
• -v 是对整行匹配结果反选,不是删除行内某个单词。
• -i 忽略大小写,-n 显示行号;空行也可能被 -v 保留。
• 模式用单引号保护,避免 Shell 展开。以减号开头的模式使用 -e 指定。
• grep 默认只输出结果,不修改原文件。
4. 实验步骤
使用固定输入,避免依赖服务器真实日志:
bash
printf 'INFO ready\nERROR timeout\nDEBUG trace\n' | grep 'ERROR'
printf 'INFO ready\nERROR timeout\nDEBUG trace\n' | grep -v 'ERROR'
printf 'INFO ready\nERROR timeout\nDEBUG trace\n' | grep -n 'ERROR'
printf 'a.b\naxb\n' | grep -F 'a.b'
预期分别输出 ERROR timeout;反选输出 INFO ready 和 DEBUG trace;行号结果为 2:ERROR timeout;字面搜索只匹配 a.b。
5. 验证命令
bash
printf 'hello\n' | grep 'hello'
printf '%s\n' "$?"
printf 'hello\n' | grep 'absent'
printf '%s\n' "$?"
预期退出状态分别为 0 和 1。通常 0 表示有匹配、1 表示无匹配、2 表示错误,不能把无匹配误报为执行故障。退出状态需紧接命令读取。
检查 grep -v 是否包含空行:
bash
printf 'INFO\n\nERROR\n' | grep -v 'ERROR' | cat -n
预期保留 INFO 和空行。要同时排除空行可用 grep -v -e 'ERROR' -e '^$'。以上是确定输入的预期结果,不是本机实测报告。