1、grep
1.1 基本介绍
grep (Globally search a Regular Expression and Print)一种强大的文本搜索工具,能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDSTR。
egrep和fgrep的命令只跟grep有很小不同。egrep和fgrep均为grep的扩展,支持更多的re元字符,fgrep就是fixed、grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。并且可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
1.2 工作方式
grep在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
1.3 基本用法
格式:grep 匹配条件 处理文件
示例:
grep root passwd ##过滤出有关root的行
参数:
参数 | 含义 | 示例 |
^ | 以某字符开头 | grep ^root passwd |
$ | 以某字符结尾 | grep root$ passwd |
-i | 忽略大小写 | grep -i root passwd |
\< | 之前无字符 | grep -E "\<root" passwd |
\> | 之后无字符 | grep -E "root\>" passwd |
-num | 显示匹配字符的前后num行 | grep -num |
-n | 显示行号 | grep -n |
-A | 显示匹配字符的num下行 | grep -A num |
-B | 显示匹配字符的num下行 | grep -B num |
-v | 逆向显示 | grep -v |
【注】示例中的 -E 和表示 egrep 该命令的使用和后面的匹配格式有关(与正则表达式的规则相同)。
命令演示:
实验素材建立:
将/etc/passwd 分为上下两部分,并分别存储于/mnt/passwd1 和/mnt/passwd2 中;并修改passwd1的内容:
![](https://i-blog.csdnimg.cn/blog_migrate/f6e3d01d4571373df9af9b7d7035a4bf.png)
参数:
![](https://i-blog.csdnimg.cn/blog_migrate/2117c5efaf6b6e40971994d1edb3883f.png)
^ $ \> \<
![](https://i-blog.csdnimg.cn/blog_migrate/9a519497d95db44f09d6df4430a0ec28.png)
-i -n
![](https://i-blog.csdnimg.cn/blog_migrate/84cb19eb2b5e943c7755ec0b2e1e88b3.png)
-num
![](https://i-blog.csdnimg.cn/blog_migrate/12fa211be7ba6b04869d8f1f63384c9e.png)
-A -B
![](https://i-blog.csdnimg.cn/blog_migrate/3c989d07790ab8062449fdf996cc8a4e.png)
-v
![](https://i-blog.csdnimg.cn/blog_migrate/4f222ec1d0d0dcdd08f492703ee9b78d.png)
1.4 匹配字符个数规则
用法:w---s #w s 为匹配字符的首尾,----表述输入的规则;
参数含义:
规则 | 表示所含字符个数 |
. | 每个点表示一个占位,可有多个 |
* | 表示任意多个 |
? | 0或1个 |
+ | 大于等于1个 |
{n} | n个 |
{n,} | 大于等于n个 |
{m,n} | m到n个 |
{,n} | 0-n个 |
(ee){n} | 有n个ee |
【注】这里的规则依然和正则表达式相同,因为正则表达式较为复杂,这里将使用的列出。
命令演示:
实验素材:
编写文件test,内容如下:
![](https://i-blog.csdnimg.cn/blog_migrate/ea188ca46f2af8eee11ccb897c61f123.png)
参数:
. ? * +
![](https://i-blog.csdnimg.cn/blog_migrate/a425cbc2dd0b5e396d5e83b5e9356e4f.png)
{n} {,n} {m,n} { n, } (ee){n}
![](https://i-blog.csdnimg.cn/blog_migrate/fd37b890a463eac26b91100851b35f5e.png)
参考资料:百度百科