linux 命令 grep
grep
是 Linux 中用于在文件或输入流中搜索文本模式的强大命令,支持正则表达式。以下是它的核心用法和常见场景:
基本语法
grep [选项] "搜索模式" 文件名
常用选项
选项 | 说明 |
---|---|
-i | 忽略大小写 |
-v | 反向匹配(显示不包含模式的行) |
-n | 显示匹配行的行号 |
-r 或 -R | 递归搜索目录下的所有文件 |
-l | 仅显示包含匹配项的文件名 |
-c | 统计匹配行的数量(而非具体内容) |
-A NUM | 显示匹配行及其后 NUM 行(After) |
-B NUM | 显示匹配行及其前 NUM 行(Before) |
-C NUM | 显示匹配行及其前后各 NUM 行(Context) |
-w | 精确匹配单词(避免部分匹配,如 -w "test" 不匹配 "testing") |
-e | 指定多个模式(如 -e "err" -e "warn" ) |
grep -l 仅显示包含匹配项的文件名
正则表达式基础
^
: 匹配行首(如^start
匹配以 "start" 开头的行)
$
: 匹配行尾(如end$
匹配以 "end" 结尾的行)
.
: 匹配任意单个字符(如a.c
匹配 "abc"、"a1c" 等)
*
: 匹配前一个字符 0 次或多次(如go*gle
匹配 "ggle"、"gogle"、"google")
\
: 转义特殊字符(如\.
匹配实际的句点)
[abc]
: 匹配括号内的任一字符(如gr[ae]y
匹配 "gray" 或 "grey")
[^abc]
: 匹配不在括号内的字符(反向匹配)
常见使用示例
在文件中搜索字符串
grep "error" log.txt # 查找包含 "error" 的行(区分大小写)
grep -i "warning" log.txt # 忽略大小写搜索 "warning"
递归搜索目录
grep -r "main()" /path/to/code # 在目录下所有文件中查找 "main()"
统计匹配行数
grep -c "success" report.log # 统计包含 "success" 的行数
显示行号及上下文
grep -n -C 2 "crash" debug.log # 显示匹配行及其前后各 2 行,并标注行号
反向匹配(排除模式)
grep -v "info" messages.log # 显示不包含 "info" 的行
使用正则表达式
grep "^2023-10-" access.log # 查找以 "2023-10- 开头的行(日期筛选)
grep "500$" response_codes.log # 查找以 500 结尾的行(HTTP 状态码)
注意事项
-
引号包裹模式:若模式包含空格或特殊字符(如
*
$
),需用单/双引号包裹。 -
文件名顺序:模式在前,文件名在后,避免混淆。
-
递归搜索权限:使用
-r
时确保对目标目录有读取权限。