一、通配符与正则表达式的区别:

1.通配符是对文件名进行匹配的;正则表达式是对文件的内容进行匹配的

2.正则表达式是要结合grep、sed、awk使用的

3.grep命令

  作用:对文件中的内容进行逐行过滤

  格式: grep  [选项]  匹配内容  文件

  选项:

    -v   取反

    -o   仅仅显示所有匹配到的内容

    --color  将匹配到的内容着色

    -i  忽略大小写

二、正则中的元字符

1 、. 表示任意一个字符(可以是空格、逗号、字母、数字……)

  示例: .a 

  说明:

  1) 表示匹配两个字符,第一个是任意字符、第二个是a

  2)在一行的任何位置匹配都可以

  

grep通配符 开头结尾 grep命令通配符_grep通配符 开头结尾

2、[ ]表示范围内的单个字符

用字母和数字的方式表示

  1)[12345]    表示1 或2 或3 或4 或5

  2)[1234567890]  表示 任意一个数字

  3)[a-z]  表示任意一个小写字母

  4)[A-Z]  表示任意一个大写字母

  5)[a-zA-Z] 表示任意字母

  6)[0-9a-zA-Z]  表示所有数字和字母的任一个

  示例:

   过滤出包含数字的行:

  

grep通配符 开头结尾 grep命令通配符_grep通配符 开头结尾_02

用字符集的方式表示

  1)[:space:]  表示一个空格

  2)[:digit:]  表示0-9全部十个数字,等价于 0123456789,而不是[0123456789]

    [[:digit:]]  表示任意一个数字

  3)[:lower:]  表示全部26个小写字母,等价于 abcdef……z

    [[:lower:]]  表示任意一个小写字母

  4)[:upper:]  表示全部26个大写字母,等价于  ABCDEF……Z

    [[:upper:]]  表示任意一个大写字母

  5)[:alpha:]  表示全部52个字母(大小写)

    [[:alpha:]]  表示任意一个字母

  6)[:punct:]  表示全部的标点符号

    [[:punct:]]  表示任意 标点符号 

  7)[:alnum:]  表示全部数字+字母(62个)

    [[:alnum:]]  表示任意一个数字或字母

  补充:

     [[:digit:][:lower:]] 表示任意一个数字或小写字母

  思考:匹配空格或数字或大写字母?

    [[:space:][:digit:][:upper:]]

3、[^]匹配范围以外的任意一个字符

  grep  "[357]"  a.txt    说明:过滤包含3或5或7任意一个数字的行

  grep  "[^357]"  a.txt   说明:如果一行中有3、5、7以外的字符,则匹配字符成功;如果一行仅有3或5或7或3、5、7三个数字任意组合,则该行不会被匹配。

  grep  -v  "[357]"  a.txt   说明:过滤出不包含3或5或7的行

4、显示匹配到的行及前后n行

  1) -A n  显示匹配到的行及后面n行

  2) -B n  显示匹配到的行及前面n行

  3) -C n  显示匹配到的行及前n行和后n行

5、次数匹配

  *  表示其前面的字符出现任意次数的情况,(0,1,n)

  .*  表示任意长度的任意字符

  ?  表示其前面的字符出现最多一次的情况

   \{m,n\}  表示其前面的字符出现最少m次,最多n次的情况

    {3,}  表示其前面的字符出现最少3次

    {,5}  表示其前面的字符出现最多5次

  示例:

  a*    表示任意多个a(可是0  1   n)

  ab*  表示a后面的b出现任意次

  a*b  表示匹配b前面有任意个a的情况

  grep  "a.*b"  fileName  表示过滤出含有a,b的行,a在前,b在后

  

grep通配符 开头结尾 grep命令通配符_git_03

6、位置锚定  

  ^  表示以什么为开头的行

  $  表示以什么为结尾的行

  ^$  表示空白行

  \<  表示单词首部

  \>  表示单词尾部

  1)过滤出包含root的行

  grep "root"   a.txt

  2)过滤出以root开头的行

  grep  "^root"  a.txt

  3)过滤出以root结尾的行

  grep  "root$"  a.txt

  4)过滤出以空格开头的行

  grep  "^[[:space:]]"  a.txt

  5)过滤出以多个空格后面是root为开头的行

  grep  "^[[:space:]]\{1,\}root"  a.txt

  6)过滤出空白行

  grep  "^$"   a.txt

7、分组

  \(  \)  将一个内容当做一个整体看待

  \1   表示引用前面的第一个分组

  \2   表示引用前面的第二个分组 

  示例:从a.txt中过滤出 出现两个相同数字的行

  grep  "\([[:digit:]]\).*\1"  a.txt

  

grep通配符 开头结尾 grep命令通配符_grep通配符 开头结尾_04

8、扩展正则表达式

  grep  -E   匹配内容   文件

  egrep  匹配内容   文件

  扩展内容:

  1) 扩展匹配模式不需要对?,{},()进行转义

  2) 次数匹配增加一个模式:+  匹配前面的一个字符至少一次

  示例:匹配文件a.txt中  a前至少有一个b的行

  grep  "b\{1,\}a"  a.txt

  grep -E  "b{1,}"  a.txt

  egrep  "b{1,}a"  a.txt

  egrep  "b+a"  a.txt

  grep -E  "b+a"  a.txt

  3)|  增加或语法

  示例:从文件a.txt中过滤出cat和Cat

  grep   -E  "(c|C)at"   a.txt

  grep   -E  "cat  |  Cat"   a.txt

  4)位置锚定与扩展表达式用法一致