Grep(Global search Regular Expression and Print out the line)是一种强大的文本搜索工具。
1. 正则表达式的基本组成部分
正则表达式 | 描述 |
^ | 行首标记 |
$ | 行尾标记 |
. | 任意一个字符 |
[] | 包含在[]中的任意一个字符 |
[^] | 不包含在[]中的任意一个字符 |
[-] | []指定范围内的任意一个字符 |
? | 匹配之前的字符1次或0次 |
+ | 匹配之前的字符1次或多次 |
* | 匹配之前的字符0次或多次 |
() | 创建一个用于匹配的字符串 |
{n} | 匹配之前的项n次 |
{n,} |
匹配之前的项至少n次 |
{n,m} | 匹配之前的项n-m次 |
| | 匹配|两边的任意一项 |
对之前的字符进行转义,不转义则代表字符本身 |
2. POSIX字符类相当于是某些字符的集合。
POSIX字符类 | 描述 |
[:alnum:] | 字母与数字字符 |
[:alpha:] | 字母字符(包括大小写) |
[:blank:] | 空格与制表符 |
[:digit:] | 数字字符 |
[:lower:] | 小写字母字符 |
[:upper:] | 大写字母字符 |
[:punct:] | 标点符号 |
[:space:] | 所有空白字符(包含换行,回车等) |
在使用POSIX字符类时,要用[]括起来,比如,要匹配三个数字,则可以写成[[:digit:]]{3}
3. 元字符是perl风格的正则表达式。
正则表达式 | 描述 |
单词边界 | |
B | 非单词边界 |
d | 单个数字字符 |
D | 单个非数字字符 |
w | 单个单词字符(字母,数字,和_) |
W | 单个非单词字符 |
换行符 | |
s | 单个空白字符 |
S | 单个非空白字符 |
回车 |
4. 常用命令选项
-e或者-E 使用egrep(目测mac的grep默认就是egrep?,待验证), 匹配多个正则表达式: grep -e 'pattern1' -e 'pattern2', 只要匹配其中的一个正则表达式就可以, 如果要同时匹配两个正则表达式, 可以使用grep -e 'pattern1' file | grep -e 'pattern2'
-o 只输出匹配部分
--color 重点标记匹配部分
-v 只输出不匹配的行
-c 统计匹配的行的个数, 如果想统计匹配的字段数, 可以用grep 'pattern' -o | wc -l
-n 打印出匹配的行数(第几行)
-b 打印匹配部分的字节或字符偏移, 可以与-o搭配使用
-l 当grep多个文件时, 显示包含匹配项的文件名
-L 当grep多个文件时,显示不包含匹配项的文件名
-R 在目录中递归搜索文件, 可以查找哪些文本出现在哪些源代码文件中
-i 忽略大小写
-q 静默模式, 不会向标准输出打印任何输出, 仅仅执行命令, 根据命令执行成功与否返回退出状态
-A n 返回匹配行及其之后的n行, A目测是After的意思
-B n 返回匹配行及其之前的n行, B目测是Before的意思
-C n 返回匹配行及其之前和之后的n行, C目测是context的意思