1.基本元字符集及其含义
正则表达式识别的特殊字符包括:
. * [] ^ $ {} \ + ?| ()
. 特殊字符点号用来匹配除换行符之外的任意单个字符。
^ 只只匹配行首echo -e "123456acdd\nhgncdg" |grep 123
$ 只只匹配行尾echo -e "123456acdd\nhgncdg" |grep dg
* 只一个单字符后紧跟*,匹配0个或多个此单字符echo -e "123456acdd\nhgncdg" |grep c*
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-表示[ ]内字符序列范围,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在shell中一些元字符有特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
p a t t e r n \ { n \ } 只用来匹配前面p a t t e r n出现次数。n为次数
p a t t e r n \ { n,\ } m 只含义同上,但次数最少为n
p a t t e r n \ { n,m \ } 只含义同上,但p a t t e r n出现次数在n与m之间
echo -e "dhdfhb123456\n aaadfhch\ndddddfhhh" |grep '[0-9]\{1,2\}'
2.扩展正则表达式
? 问号表明前面的字符可以出现0次或1次,但只限于此。它不会匹配多次出现的字符。
echo -e "acdf\n123"|egrep 123?
+ 加号表明前面的字符可以出现1次或多次,但必须至少出现1次。echo -e "acdf\n123\n456123"|egrep 123+
{n,m} ERE中的花括号允许你为可重复的正则表达式指定一个上限。这通常称为间隔(interval)。
可以用两种格式来指定区间。
m:正则表达式准确出现m次。
m, n:正则表达式至少出现m次,至多n次。
这个特性可以精确调整字符或字符集在模式中具体出现的次数。
echo -e "acdf\n123\n456123"|egrep "123{1,2}"
| 管道符号允许你在检查数据流时,用逻辑OR方式指定正则表达式引擎要用的两个或多个模式。
() 正则表达式模式也可以用圆括号进行分组。当你将正则表达式模式分组时,该组会被视为一个标准字符。可以像对普通字符一样给该组使用特殊字符。