1.匹配字符出现次数的元字符

1.1从零次到无数次的*

*在正则表达式中表示次数的意思。前一个字符连续出现任意次(从零次到无数次)

k*   k出现的次数从零次到无数次

所以这个正则表达式会匹配文件中任何行,因为每一行文件内容都会至少出现零次k字符,这就是为什么你会看到不相干的文本内容的原因。

grep过滤掉空行 grep过滤特殊字符_grep过滤掉空行

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

grep过滤掉空行 grep过滤特殊字符_服务器_02

1.2表示一次到无数次的\+

\+表示前一个字符至少出现一次,但是想要该正则表达式起作用,还需要在+的前面加上右斜杠

grep过滤掉空行 grep过滤特殊字符_正则表达式_03

由上图所示,在\+之前的k字符,只要出现过一次k的文件内容全部被调出。(从一次到无数次)

几个元字符的综合使用如下:

 grep "a[0-9]\+" /tmp/file01

grep过滤掉空行 grep过滤特殊字符_运维_04

将a后跟着的任意数字的文件内容都调了出来。

1.3表示最多出现过一次的元字符\?

\?表示右斜杠之前的字符最多出现一次。

grep过滤掉空行 grep过滤特殊字符_元字符_05

1.4\{n\}匹配大括号的前一个字符精确出现多少次?

ab\{3\}字母b必须出现三次,多一次不行,少一次不行。

即命令 grep “ab{3}”  只能匹配abbb这样的文件内容。

grep过滤掉空行 grep过滤特殊字符_元字符_06

拓展\{2,5}\

代表大括号前面的字符,最多出现5次,最少出现2次。

拓展\{2,\}

代表大括号前面的字符,最少出现2次,最多出现的次数没有限制。

上述四个元字符的共同点是控制前一个字符的出现次数,符合条件的文本内容,被调出。

关于正则表达式中的分组问题,即把多个字符当成一个整体\(\)

grep过滤掉空行 grep过滤特殊字符_运维_07

如上图所示,\(ab\)+表示在所调查的文件中,至少出现一次ab或者无数次ab。

 

grep过滤掉空行 grep过滤特殊字符_元字符_08

如上图所示,将文件中ab至少出现2次的文件内容进行调出。

grep过滤掉空行 grep过滤特殊字符_元字符_09

在目的文件中,"z[a-z]\+y"   在z和y的中间只要有小写字母,无关次数,全部写出。

2.匹配字符出现位置的元字符

^root表示以root开头的文件内容

^[sd]表示以sd开头的文件内容。

grep过滤掉空行 grep过滤特殊字符_grep过滤掉空行_10

grep过滤掉空行 grep过滤特殊字符_服务器_11

如上图所示,^[sd]表示要去搜索以sd开头的文件,[^sd]表示取反

[^sd] 会匹配除了 s 和 d 之外的任何单个字符。

而当我想获取即不是s开头的文件也不是d开头的文件时,就需要我们使用^[^sd]这样的正则表达式来过滤文件内容。

当你想调出以sh结尾的文件内容时,就需要使用sh$这样的正则表达式来过滤文件内容。

grep过滤掉空行 grep过滤特殊字符_grep过滤掉空行_12

正则表达式^$的意思是以空白开头,以空白结尾,就是在文件中的空行内容。

由一堆空格组成的空行不算是真正的空行,只有一个回车组成的空行才叫做是一个空行。

grep过滤掉空行 grep过滤特殊字符_运维_13