首页 / Linux 命令行入门教程 / 27. grep 搜索(基础与正则)

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

egrepgrep -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"。它和 headsort 搭配能玩出很多花样。

小结:grep 按模式筛行。-i 不区分大小写、-v 取反、-r 递归搜。正则用 ^ $ . 写规则。