grep 是 General Regular Expression Parser(通用正则表达式解析器)的缩写。
grep 命令可以在文件中搜索字符串。语法如下所示:
grep [options] PATTERN [FILES]
如果没有文件名,grep 则搜索标准输入。
grep 中一些主要 选项
选项 | 含义 |
-c | 输出匹配行的数目,而不输出匹配的行 |
-E | 启用扩展表达式 |
-h | 取消每个输出行的普通前缀,即匹配查询模式的文件名 |
-i | 忽略大小写 |
-l | 只列出匹配行的文件名,而不输出匹配行 |
-v | 对匹配模式取反,即搜索不匹配行 |
grep 中使用正则表达式,正则表达式允许你实现更复杂的匹配。
正则表达式中一些特殊字符
字符 | 含义 |
^ | 指向一行的开头 |
$ | 指向一行的结尾 |
. | 任意一个档次 |
[ ] | 方括号内包含一个字符范围,其中任何一个字符都可以被匹配,例如字符范围 a~e 或在字符范围前面加上 ^ 符号表示反向字符范围,即不匹配指定范围的字符 |
如果想将上述字符作为普通字符,就需要在他们前面加上 \ 字符。例如 \$
在方括号中还可以使用一些特殊的匹配模式, 如下表:
匹配模式 | 含义 |
[:alnum:] | 字母与数字字符 |
[:alpha:] | 字母 |
[:ascii:] | ASCII 字符 |
[:blank:] | 空格或制表符 |
[:cntrl:] | ASCII 控制字符 |
[:digit:] | 数字 |
[:graph:] | 非控制、非空格字符 |
[:lower:] | 小写字母 |
[:print:] | 可打印字符 |
[:punct:] | 标点符号字符 |
[:space:] | 空白字符,包括垂直制表符 |
[:upper:] | 大写字母 |
[:xdigit:] | 十六进制数字 |
| |
如果 grep 指定了用于扩展的 -E 选项,那些用于控制匹配完成的其他字符可能会遵循正则表达式的规则(如下表),在grep 中我们还需要在下表中的字符前加上 \ 字符;
选项 | 含义 |
? | 匹配是可选,当最多匹配一次 |
* | 必须匹配 0 次或多次 |
+ | 必须匹配一次货多次 |
{n} | 必须匹配 n 次 |
{n,} | 必须匹配 n 次或 n 次以上 |
{n, m} | 匹配次数在 n 和m 之间,包括n 和 m |
示例 :
1、在 test.txt 中查找已 字母 e 结尾的行
grep e$ test.txt
2、在 test.txt 中查找以字母 e 结尾的单词, 我们需要 [] 和 [:blank:]
grep e[[:blank:]] test.txt
3、在 test.txt 中查找以 Th 开头的由三个字母组成的单词。用[[:space]] 划定单词结尾,用字符 . 匹配额外的字符
grep Th.[[:space:]] test.txt
4、查找只有 10 个字符长度的全部由小写字母组成的单词。我们需要指定字符的范围 a 到 z,同时需要重复 10 次。
grep -E [a~z]\{10\} test.txt