正则表达式与之前学过的通配符很相似,但是功能有区别
通配符:find 模糊匹配(默认是精准匹配)
正则表达式:grep精准匹配(默认是模糊匹配)
基础正则表达式
. (英文的。)
表示匹配任意一个字符(字母、数字、符号等任意字符)
[]
[]表示匹配[]中任意一个字符,不过只能匹配一个字符
如:[abc]要么匹配a,要不匹配b,要么匹配c
*
表示*前的一个字符匹配0次或任意次数
如:aa*
,只对前的一个字符生效,所以第一个a不生效,第二个才生效,可以匹配到a(匹配0次)aa(匹配1次)aaaaa(匹配4次)
如:a*
可以匹配全文
如:a.*
匹配以a开始的后面可以是任意长度的任意字符
如:.*
表示任意长度的任意字符,也可以匹配空白行
?
用转义符来使用?:\?
匹配\?前一个字符0次或一次
如:aa\? 可以匹配 a(匹配0次)aa(匹配1次)
{}
用转义符来使用:\{ \}
\{n\} 表示前面的字符恰好出现n次
\{n,\} 表示其前面的字符出现不小于n次
\{n,m\} 匹配其前面的字符出现不小于n次,最多出现m次
^与$
^表示匹配行首
[^] 中括号中的 ^表示取非
^ [^a-Z]表示匹配行首不是字母开头的其他字符
$表示匹配行尾
^$可以匹配空白行
()
用转义符来使用:\( \)
()表示分组匹配
()中的字符串被当作一个整体,变成一个字符
扩展正则表达式
我们基础正则表达式是用grep来匹配
这里我们可以结合grep -E 或egrep 来省略转义符来使用
用grep时,扩展正则需要用转义符 \{\} \? \(\)
用grep -E 或者 egrep 命令时:可以将扩展正则表达式的转义符去掉,直接使用符号{} ? ()
+
+表示匹配+前的一个字符1次或任意次数
如:aa+ 匹配到)aa(匹配1次)aaa(匹配2次)
|
|表示同时匹配|两侧的内容