grep 用 -v 选项可显示不包含关键词的行,支持正则、组合选项(如 -E、-i)、单词边界(\b)和固定字符串匹配(-F),适用于文件、管道及多文件处理。

用 grep 显示不包含关键词的行,核心是加上 -v 选项(invert match,取反匹配)。
基本语法:用 -v 排除关键词
grep -v "关键词" 文件名 会输出所有**不含**该关键词的行。
- 例如:
grep -v "error" logfile.txt→ 显示所有不带 "error" 的日志行 - 关键词支持正则表达式,比如
grep -v "^#|^$" config.conf排除注释行和空行 - 加
-i可忽略大小写:grep -vi "warning" log.txt
配合其他常用选项更实用
单独 -v 往往不够,常和这些组合使用:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
grep -v -E "pattern1|pattern2":排除多种关键词(需 -E 启用扩展正则) -
grep -v "keyword" file | grep "another":先排除再筛选,实现“不包含 A 但包含 B” -
grep -v "^\s*$" file:排除纯空白行(^ 行首,\s* 任意空白字符,$ 行尾)
注意匹配边界,避免误排除
直接写 grep -v "log" 会把 logging、catalog 也排除掉。需要更精确时:
- 用单词边界:
grep -v "\blog\b"(只排除独立单词 "log") - 用固定字符串匹配(更安全):
grep -v -F "log",-F 把关键词当字面量,不解释正则元字符 - 检查是否含多余空格或换行符,必要时先用
cat -A查看隐藏字符
处理多文件或管道输入
grep -v 同样适用于标准输入和通配符:
-
ps aux | grep -v "grep":过滤进程列表时排除 grep 自身进程(常用技巧) -
grep -v "TODO" *.py:在所有 .py 文件中查找不含 "TODO" 的文件内容 -
find . -name "*.txt" -exec grep -vl "secret" {} \;:列出**不包含** "secret" 的 txt 文件名(-l 输出文件名,-v 配合生效)

















