一、简介
通用正则表达式解析器(grep,General Regular Expression Parser),打印符合某个特征的行。类似的命令还有egrep, fgrep, rgrep,这里只简单介绍一下常用的grep,语法:
grep [option] PATTERN [FILES]
一共有三个参数,分别是选项、模式和文件。option可以出现在命令后的任意位置,毕竟有-标识。
选项
| 选项 | 含义 |
|---|---|
| -c | 输出匹配行数目,而不是输出匹配的行 |
| -E | 启动扩展表达式 |
| -h | 取消每个输出行前缀,即匹配查询模式的文件名 |
| -i | 忽略大小写 |
| -l | 只列出匹配行的文件名,而不输出真正的匹配行 |
| -v | 对匹配模式取反,即搜索不匹配的行 |
模式
grep默认支持通配符。正则表达式就是一些字符是有特殊含义的,和其他语言一样,如果你要去除特殊含义请使用\。一般情况下,脚本文件(shell)中的参数以空白字符分隔(空格 制表和换行),如果你想要在参数中加上一个或者多个空白字符,那么你需要给参数加上引号。
| 字符 | 含义 |
|---|---|
| ^ | 指向一行的开头 |
| $ | 指向一行的结尾 |
| . | 单个字符 |
| [ ] | [0-9]字母集合,[0-9a-z]表示字母与数字集合,在这里边的^表示的不是一行开头而是非,[^0-9]非数字字符 |
还有一些常用的字符集合被前人归纳成下表
| 集合 | 含义 |
|---|---|
| [:alpha:] | 字母 |
| [:digit:] | 数字 |
| [:ascii:] | ASCII字符 |
| [:alnum:] | 字母或数字 |
| [:blank:] | 空格、制表 |
| [::cntrl:] | ASSII控制字符 |
| [:graph:] | 非控制、非空格 |
| [:lower:] | 小写字母 |
| [:upper:] | 小写字母 |
| [:print:] | 可打印 |
| [:punct:] | 标点符号 |
| [:xdigit:] | 十六进制数字 |
如果这还不能满足你的筛选需求,你可以使用-E选项,让grep启用扩展表达式:
| 选项 | 含义 |
|---|---|
| ? | 没有,如果有就只有一个 |
| * | 空或多个 |
| + | 至少一个 |
| {n} | 匹配切确的n个 |
| {n,} | 至少n个 |
| {n,m} | [n,m]个 |
二、实际应用
grep命令常常与其他命令结合,该命令是管道的一个非常好的实践。
- 找进程 ps -ef|grep java
- 数进程 ps -ef|grep -c java
- 找文件中的关键字 grep ‘linux’ test.txt test2.txt
