1.匹配字符出现次数的元字符
1.1从零次到无数次的*
*在正则表达式中表示次数的意思。前一个字符连续出现任意次(从零次到无数次)
k* k出现的次数从零次到无数次
所以这个正则表达式会匹配文件中任何行,因为每一行文件内容都会至少出现零次k字符,这就是为什么你会看到不相干的文本内容的原因。
.*表示任意长度的任意字符。
1.2表示一次到无数次的\+
\+表示前一个字符至少出现一次,但是想要该正则表达式起作用,还需要在+的前面加上右斜杠
由上图所示,在\+之前的k字符,只要出现过一次k的文件内容全部被调出。(从一次到无数次)
几个元字符的综合使用如下:
grep "a[0-9]\+" /tmp/file01
将a后跟着的任意数字的文件内容都调了出来。
1.3表示最多出现过一次的元字符\?
\?表示右斜杠之前的字符最多出现一次。
1.4\{n\}匹配大括号的前一个字符精确出现多少次?
ab\{3\}字母b必须出现三次,多一次不行,少一次不行。
即命令 grep “ab{3}” 只能匹配abbb这样的文件内容。
拓展\{2,5}\
代表大括号前面的字符,最多出现5次,最少出现2次。
拓展\{2,\}
代表大括号前面的字符,最少出现2次,最多出现的次数没有限制。
上述四个元字符的共同点是控制前一个字符的出现次数,符合条件的文本内容,被调出。
关于正则表达式中的分组问题,即把多个字符当成一个整体\(\)
如上图所示,\(ab\)+表示在所调查的文件中,至少出现一次ab或者无数次ab。
如上图所示,将文件中ab至少出现2次的文件内容进行调出。
在目的文件中,"z[a-z]\+y" 在z和y的中间只要有小写字母,无关次数,全部写出。
2.匹配字符出现位置的元字符
^root表示以root开头的文件内容
^[sd]表示以sd开头的文件内容。
如上图所示,^[sd]表示要去搜索以sd开头的文件,[^sd]表示取反
[^sd]
会匹配除了 s
和 d
之外的任何单个字符。
而当我想获取即不是s开头的文件也不是d开头的文件时,就需要我们使用^[^sd]这样的正则表达式来过滤文件内容。
当你想调出以sh结尾的文件内容时,就需要使用sh$这样的正则表达式来过滤文件内容。
正则表达式^$的意思是以空白开头,以空白结尾,就是在文件中的空行内容。
由一堆空格组成的空行不算是真正的空行,只有一个回车组成的空行才叫做是一个空行。