如果我们对特定的某个字符操作的话,相对来说很简单,比如tom,mary。如果我需要操作的这些字符,他们不是具体的某些字符,比如第一个字符是字母,第二个是数字,第三个是特殊字符等。在我们现实生活中,我们可以使用一些特殊的字符表示,比如△字母,○表示数字,表示特殊字符。
2、Grep的基本用法
Grep也支持正则表达式,因为grep比较简单,所以我们就用grep来让大家理解什么是正则表达式。
Grep的作用是用来过滤含有特定字符的行。
用法:grep 关键字 file
因为我们现在过滤的是比较简单的一个关键字。但如果说我要过滤一些特定字符的文件该如何完成?
我们可以这样来做:grep △○ file
纸上可以这样写,但是计算机并不识别这些符号△○,所以就引入元字符的概念。
3、正则表达式元字符:
文件aa内容:
^ 表示行开头,下图表示匹配以tom开头的行
$ 表示行尾,下图表示匹配以tom结尾的行
. 表示单个字符,可以匹配除了换行符之外的所有字符。下图表示匹配包含tom及后面的任意三个字符的行:
* 表示其前面的字符可以出现任意次,包括0次
+ 表示其前面的字符至少要出现一次:
这个命令里面使用了-E选项,意思是使用扩展的grep,因为grep所能使用的元字符有限。
元字符*和+都是贪婪型的,即最长匹配。见下图:
有时候我们需要最短匹配,又叫懒惰型匹配。匹配时只要在*后面加?即可。
?表示其前面的字符可以有,也可以没有。
注意:grep不支持+和? 这些元字符,如果要使用,需要扩展的grep(egrep或grep -E)。
[] 表示匹配一个字符,出现在[]里面的字符都是“或”的关系。
^ 如果是出现在[]外面的话,表示开头的意思,如果出现在[]里面的话,表示否定的意思。
刚才^和$,表示匹配行的开头和结尾,如果要匹配单词的开头,要使用:\<
\> 表示匹配单词的结尾:
\btomb\ 表示只匹配单词为tom的行:
正则表达式中,也可以做标签,如果匹配模式中给某一部分做了一个标签,我们在后面就可以直接引用他。如果我们想对某一部分做标签的话,只要使用\(\)括起来就可以了,引用就使用\n(n表示一个数字)。比如第一个被\(\)引起来的部分,引用就使用\1。
\{n\} 表示匹配其前面的字符n次,如下图:
\{n,\} 表示匹配其前面的字符至少n次,如下图:
\{n,m\} 表示匹配其前面的字符至少n次,至多m次,如下图:
[0-9] 表示匹配数字
\d 也可以表示匹配数字:
\D 表示匹配非数字
\s 表示空格或tab
\S 表示不能是空格或tab
\w 表示任意字符(大小写字母、数字、下划线)
\W 表示不能是字母、数字和下划线
正则表达式也支持国际字符:
[[:digit:]] 表示数字
[[:alpha:]] 表示字母,包括大小写
[[:upper:]] 表示大写字母
[[:lower:]] 表示小写字母