1. grep 概述
1.1 grep 是什么
在我们日常 Linux 运维过程中,最多的就是对 Linux 文件进行处理,grep(global search regular expression (RE) and print out the line)作为一款非常方便且强大的文本搜索工具,其能使用正则表达式搜索文本,并把匹配的行打印出来,其使用对象为 Linux 系统的所有用户,使得我们日常操作更加方便简单。
1.2 为什么要用 grep
在 Linux 系统中一切皆文件,我们日常的工作就是与文件打交道,能够运用 grep 这款文件搜索工具,可以大大提高我们的工作效率,我们上节课学习了正则表达式,grep 配合正则表达式能够作出 1+1 大于 2 的效果,灵活使用使得我们的工作更加高效快捷。
2. grep 详解
2.1 grep 分类
Unix 的 grep 家族包括 grep、egrep 和 fgrep。egrep 和 fgrep 的命令跟 grep 只有很小不同。
- egrep 是 grep 的扩展,其支持更多 re 元字符,和扩展正则表达式等。
- fgrep 就是 fixed grep 或 fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示其自身的字面意义,不再特殊。
- linux 使用 GNU 版本的 grep。它功能更强,可以通过 - G、-E、-F 命令行选项来使用 egrep 和 fgrep 的功能。
2.2 grep 工作方式
grep 的工作方式为将一个或多个文件中搜索字符串模版。如果模版包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
grep 命令结束后通过一个状态值来说明搜索状态,如果为 0 则意味着搜索成功,反之则为失败,我们可以利用其对文件自动化处理。
2.3 grep 语法
- 1
其中 OPTION
有很多方式,例如 - A3 表示显示符合范本样式的那一行之外,并显示该行之后的 3 行内容。
PATTERN
表示:匹配的模式,通常为一个表达式。
FilE
为具体的需要处理的问题,当然也可以为标准输入。
2.3 参数详解
在上一节中我们详细讲解了正则表达式,它就可以用在 grep 命令的 PATTERN
字段中,使得 grep 更加强大,本章节我们着重来讲解 grep 命令的 OPTION
。
不加参数,匹配 /etc/passwd 文件中的 root 行,例如:
- 1
- 2
- 3
- -A:显示模式匹配后的几行
查找 /etc/passwd 文件中以 root 开头的后两行,例如:
- 1
- 2
- 3
- 4
- -B:显示模式匹配行的前几行
查找 /etc/passwd 文件中以 bin 开头的前一行,例如:
- 1
- 2
- 3
- -C:显示模式匹配的前后各几行
查找 /etc/passwd 文件中以 ftp 开头的前后各 2 行,例如:
- 1
- 2
- 3
- 4
- 5
- 6
- -i:忽略大小写匹配
匹配 /etc/passwd 包含 "Nobody" 的行,例如:
- 1
- 2
- 3
- -o :只显示匹配到的字符串
匹配出 /etc/passwd 文件中字符串长度最少 10 位的字符 ,例如:
- 1
- 2
- 3
- -n:输出匹配到的行的行号
匹配出 /etc/passwd 文件中包含 root 的字符串的行,例如:
- 1
- 2
- 3
- -v:反向选择,即显示除过 匹配’搜寻字符串’ 内容的那一行
匹配出 /etc/passwd 中不包含 bash 的行,例如:
- 1
- 2
- 3
- 4
- 5
- -c : 计算找到 ‘搜寻字符串’ 的次数
计算 /etc/passwd 文件中 root 字符串出现的次数,例如:
- 1
- 2
- -E: 开启正则表达式,相当于使用命令
egrep
查找 /etc/passwd 文件中包含三位数字的行,例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3. 实例
3.1 需求
编写一个脚本,获取 Linux 系统的服务信息,将结果保存到文件中。
3.2 思路
可以利用函数来编写获取 Linux 服务相关信息,最后利用重定向将信息输出到文件中。
3.3 实现
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
可以看到利用了一个函数来获取系统的信息,主函数将输出利用重定向方式保存到文件中。
4. 注意事项
- grep 对于文件搜索效率非常高,其不会对源文件作出修改;
- 默认 Linux 系统 grep 可以使用参数 - E,-F 来使用 egrep/fgrep;
- 对于复杂的条件可以利用 grep 配合管道多匹配来达到目的。
5. 小结
grep 命令是 Linux 系统非常强大的文本搜索工具,可以配合正则表达式及其丰富的选项来灵活处理,同时对于复杂的文件搜索,可以配合管道多次匹配来达到搜索的目的,特殊情况下可以利用选项 - E,开启正则表达式来提供强大的模式匹配处理。