前言:
在前面的基础指令部分,我们学习到了关于grep指令的基础用法,恰好最近有经常使用grep的需求,不得不对grep指令进行更多的了解,索性专门写一篇博客以作记录,也做分享。

目录
一、grep基础
grep: 是 linux 系统中的一个强大的文本搜索工具,可以按照 正则表达式 搜索文本,并把匹配到的行打印出来(匹配到的内容标红)。
- 语法:grep [选项] 【模式】 [文件]
- 作用:
- 返回值:
- 如果模板搜索成功,则返回 0 状态码;
- 如果搜索不成功,则返回 1 状态码;
- 如果搜索的文件不存在,则返回2 的状态码。
- 常用选项:
1. 基础搜索选项
选项 英文全称 中文翻译 作用 -i--ignore-case忽略大小写 匹配时不区分大小写 -v--invert-match反向匹配 显示不匹配的行 -w--word-regexp单词匹配 只匹配完整单词 -x--line-regexp整行匹配 仅匹配整行内容
现在我已经创建了一个一万行的文件,接下来我会对该文件进行操作来演示。
演示:
1)-i

2) -v

3)-w

4)-x

2. 输出控制选项
选项 英文全称 中文翻译 作用 -n--line-number显示行号 输出匹配行的行号 -c--count统计匹配数 仅显示匹配行的总数 -o--only-matching仅输出匹配部分 只显示匹配的文本(非整行) -q--quiet静默模式 不输出结果(用于脚本判断)
演示:
1)-n
![]()
2) -c
这个选项可以快速得出,匹配行数的大小
![]()
3)-o
4)-q
这个选项较为特殊,使用它的场景一般是对文件快速判断,某个内容是否存在,但是不关心它的存在形式与数量。
-
启用
-q后,grep会完全禁止输出匹配结果(既不显示匹配的行,也不显示文件名)。 -
通常用于脚本中,只关心是否匹配成功(通过退出状态码判断),而不需要显示内容。

在这个例子当中,我们看到返回值为1,这证明没有搜索成功(因为我们的选项当中不带有“-i”,没存在大小写检查)。

3. 文件与目录选项
| 选项 | 英文全称 | 中文翻译 | 作用 |
|---|---|---|---|
-r | --recursive | 递归搜索 | 搜索目录及其子目录 |
-R | --dereference-recursive | 递归搜索(跟随符号链接) | 同-r,但跟踪符号链接 |
-l | --files-with-matches | 列出匹配文件名 | 仅显示包含匹配项的文件名 |
-L | --files-without-match | 列出不匹配文件名 | 显示无匹配项的文件名 |
演示:
1)-r
![]()
2) -R【它与“-r”选项的区别在于,它会跳转到一个链接实际指向的文件当中进行搜索】
该选项不好演示,这里就无法给大家演示。
3) -l

4)-L

大家可能会好奇4去哪里呢,其实4的选项都是关于正则表达式模式的选项,而正则表达式模式在下面会有专门的介绍,所以这里就不在赘述了。
5. 上下文控制选项
| 选项 | 英文全称 | 中文翻译 | 作用 |
|---|---|---|---|
-A NUM | --after-context=NUM | 显示匹配行后NUM行 | 输出匹配行及其后若干行 |
-B NUM | --before-context=NUM | 显示匹配行前NUM行 | 输出匹配行及其前若干行 |
-C NUM | --context=NUM | 显示匹配行前后NUM行 | 同时输出前后若干行 |
演示:
1)-A 【数字】

3)-B 【数字】

3)-C 【数字】

6. 其他实用选项
| 选项 | 英文全称 | 中文翻译 | 作用 |
|---|---|---|---|
--color | --color=auto | 高亮匹配文本 | 匹配内容的文件着色显示 |
-H | --with-filename | 显示文件名 | 输出时包含文件名(默认多文件时启用) |
-h | --no-filename | 隐藏文件名 | 输出时省略文件名 |
-s | --no-messages | 忽略错误信息 | 不显示文件不存在等错误 |
演示:
1)--color

剩下的选项的使用是一样,这里就不再过多的演示了。
二、正则表达式
1.概念
正则表达式(简称 regex 或 regexp)是一种用于 匹配、查找、替换文本 的强大工具。它通过定义一种 模式(pattern),可以在字符串中快速搜索符合特定规则的文本片段。而我们上面介绍的grep就是基于它开发形成的。
2. 基本组成部分
正则表达式由 普通字符(如 a、1、#)和 元字符(特殊符号,如 .、*、^)组成。
(1)普通字符
直接匹配字面值,例如:
-
cat匹配字符串"cat"。 -
123匹配字符串"123"。
演示:

(2)元字符(特殊符号)
| 元字符 | 作用 | 示例 | ||
|---|---|---|---|---|
. | 匹配任意单个字符(除换行符 \n) | a.c 匹配 abc、aXc | ||
^ | 匹配行首 | ^hello 匹配以 hello 开头的行 | ||
$ | 匹配行尾 | end$ 匹配以 end 结尾的行 | ||
* | 前一个字符出现 0 次或多次 | a*b 匹配 b、ab、aab | ||
+ | 前一个字符出现 1 次或多次 | a+b 匹配 ab、aab(不匹配 b) | ||
? | 前一个字符出现 0 次或 1 次 | a?b 匹配 b 或 ab | ||
| | | | | 或逻辑,匹配多个模式之一 | cat | dog | 匹配cat或dog` |
[] | 匹配括号内的任意一个字符 | [aeiou] 匹配任意元音字母 | ||
[^] | 匹配不在括号内的字符 | [^0-9] 匹配非数字字符 | ||
() | 分组,用于组合多个字符 | (ab)+ 匹配 ab、abab | ||
{} | 指定前一个字符的重复次数 | a{2,4} 匹配 aa、aaa、aaaa | ||
\ | 转义字符,使元字符变为普通字符 | \. 匹配字面的 . |
演示:
1).

2)^
![]()
3)$
4)*

这里之所以把不含有9的行打印处理是因为 *可以匹配成0个9,所以操作系统将所有的行都打印出来了。
5)+

5)?

后面的元字符的使用没有啥区别,这里就不再赘述了。
注:
有一些元符号,除了可以作为字符串的一部分,同时也有特殊的含义。
这类符号可以进一步分为两类。
第一类:^ $ . [ ] * \
在 grep 命令中,默认为特殊含义,若要作为字符串的一部分,则需要在前面加上反斜杠 \ 。第二类:( ) | ? + { }
在grep命令中,默认为字符串,若要使用其特殊含义,则用 grep -E 。
总结:
正则表达式+grep就像文本处理的“魔法咒语”,它能让你用简单的符号组合高效完成搜索、匹配和替换任务。无论是从日志中提取关键信息,还是验证数据格式,掌握这些元字符(比如 ^ 匹配行首、. 匹配任意字符、* 匹配重复模式)都能事半功倍。那我们下期见。

2万+

被折叠的 条评论
为什么被折叠?



