Linux 命令行入门教程
27. grep 搜索(基础与正则)
本教程共 90 篇 · 第 27 篇
27. grep 搜索(基础与正则)
grep 是在文本里找关键词的利器。给它一个模式,它把匹配的行全打印出来。
最基本的用法,在文件里搜一个词:
grep "error" app.log
所有含 error 的行都会出现。模式区分大小写,Error 不会被匹配到。
常用选项
-i 忽略大小写,大小写都算数:
grep -i "error" app.log
-n 顺带显示行号,配合看很方便:
grep -n "timeout" app.log
-v 反向,只显示不匹配的行,等于”排除”:
grep -v "DEBUG" app.log
-c 不打印行,只数有几行匹配:
grep -c "error" app.log
-r 递归搜整个目录,找回某个配置藏在哪最实用:
grep -r "port" /etc/
基础正则
模式不只是固定词,还能写规则。^ 表示行首,$ 表示行尾:
grep "^#" config.txt # 找以 # 开头的注释行
grep "done$" script.sh # 找以 done 结尾的行
. 匹配任意一个字符。想搜真正的点号,用反斜杠转义 \.:
grep "192\.168" access.log
egrep 或 grep -E 支持更丰富的扩展正则,比如 a|b 表示”a 或 b”:
grep -E "warn|error" app.log
Note
egrep本质上等于grep -E,但egrep已被 GNU 标记为废弃(grep 3.8 起会告警),新脚本请直接用grep -E。
Tip
grep常接在管道后面(见 §25),例如cat app.log | grep "error"。它和head、sort搭配能玩出很多花样。
小结:grep 按模式筛行。-i 不区分大小写、-v 取反、-r 递归搜。正则用 ^ $ . 写规则。