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单词边界
\B非单词边界
\d单个数字字符
\D单个非数字字符
\w单个单词字符(字母,数字,和_)
\W单个非单词字符
\n换行符
\s单个空白字符
\S单个非空白字符
\r回车

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的意思

05-11 17:55