1、简介:

  grep是一个最初用于Unix操作系统的命令行工具,在Linux同样得到了广泛的使用,这个程序的名称来自Unix文本编辑器ed类似操作的命令。grep全称是Globally search for a Regular Expression and print out the line,表示在给出文件列表或标准输入后,会对匹配一个或者多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本,Linux下所有用户皆可使用。

2、格式:

grep [OPTIONS] PATTERN [FILE...]

3、常用选项:

--color=auto:表示使用颜色填充匹配到的内容,使其高亮显示,效果如下图:

51cto博客×××作《Linux之正则表达式》_grep

-v:反向匹配,显示不能被模式所匹配到的行;

使用-v选项的效果如下图:

51cto博客×××作《Linux之正则表达式》_grep_02

未使用-v选项的效果如下图:

51cto博客×××作《Linux之正则表达式》_命令行工具_03

-i:不区分字符大小写,效果如下图:

51cto博客×××作《Linux之正则表达式》_命令行工具_04

-o: 仅匹配被模式匹配到的字串,而非整行;

使用-o选项的效果如下图:

51cto博客×××作《Linux之正则表达式》_Linux_05

不使用-o选项的效果如下图:

51cto博客×××作《Linux之正则表达式》_Linux_06

正常显示效果:

51cto博客×××作《Linux之正则表达式》_Linux_07

-A#:#为数字,表示匹配到内容及其后边的#行,效果如下图:

51cto博客×××作《Linux之正则表达式》_Linux_08

-B#:#为数字,表示匹配到内容及其前边的#行,效果如下图:

51cto博客×××作《Linux之正则表达式》_Linux_09

-C#: #为数字,表示匹配到内容及其前后的#行,效果如下图:

51cto博客×××作《Linux之正则表达式》_命令行工具_10

4、正则表达式元字符:正则表达式是一类字符所书写出来的模式(pattern),元字符:不代表字符 本身的意义,用于额外功能性的描述。

字符匹配:

.:表示匹配任意单个字符,效果如下图:

51cto博客×××作《Linux之正则表达式》_Linux_11

[]:表示匹配范围内的任意单个字符,[^]:表示匹配范围外的任意单个字符,效果如下图:

51cto博客×××作《Linux之正则表达式》_egrep_12

常用范围表示格式:

[0-9]:表示匹配所有数字,等同于[[:digit:]],效果如下图:

51cto博客×××作《Linux之正则表达式》_命令行工具_13

[[:lower:]]:表示匹配所有小写字母,等同于[a-z],效果如下图:

51cto博客×××作《Linux之正则表达式》_命令行工具_14

[[:upper:]]:表示匹配所有大写字母,等同于[A-Z],效果如下图:

51cto博客×××作《Linux之正则表达式》_Linux_15

[[:alpha:]]:表示匹配所有大写字母和小写字母,效果如下图:

51cto博客×××作《Linux之正则表达式》_Linux_16

[[:alnum:]]:表示匹配字母和数字,效果如下图:

51cto博客×××作《Linux之正则表达式》_grep_17

[[:punct:]]:表示匹配标点符号,效果如下图:

51cto博客×××作《Linux之正则表达式》_Linux_18

[[:space:]]:表示匹配空白字符,由于空白字符无法显示颜色这里取非空白符测试,效果如下图:

51cto博客×××作《Linux之正则表达式》_Linux_19

次数匹配:

*:表示匹配之前的字符任意次

\?:表示匹配之前的字符0次或1次

\{m\}:表示匹配之前的字符m次

\{m,n\}:表示匹配之前的字符至少m次,至多n次

\{m,\}:表示匹配之前的字符至少m次

\{0,n\}:表示匹配之前的字符至多n次

51cto博客×××作《Linux之正则表达式》_命令行工具_20

位置锚定:

^:锚定行首

51cto博客×××作《Linux之正则表达式》_Linux_21

$:锚定行尾

51cto博客×××作《Linux之正则表达式》_egrep_22

^$:空白行

51cto博客×××作《Linux之正则表达式》_Linux_23

单词锚定:

\<char:锚定词首,等同于\bchar

char\>:锚定词尾, 等同于char\b

\<char\>:表示锚定单词,等同于\bchar\b

51cto博客×××作《Linux之正则表达式》_命令行工具_24

分组:\(pattern\)        

引用:\(pattern\).*\1:表示引用前边分组内容

51cto博客×××作《Linux之正则表达式》_Linux_25

5、egrep和grep的差异:

增加的元字符

+:表示匹配前边的字符至少一次

|:表示匹配两边的任意一边,比如x|y,表示匹配x或者y

51cto博客×××作《Linux之正则表达式》_命令行工具_26

温馨提醒:注意有无小括号的区别

变动的元字符

? :等同于grep中的\?

():等同于grep中的\(\)

{}:等同于grep中的\{\}

51cto博客×××作《Linux之正则表达式》_Linux_27