一、通配中的元字符的意义如下(不使用正则表达式):
* 表示任意多的任意字符
? 表示一个任意字符
^ 表示取反
[] 同正则表达式的用法
{} 表示一组表达式的集合 {}中表达式是或的关系
如 ls -l {*.cpp,[1234]*.c} 列出满足表达式*.cpp 或者[1234]*.c的文件
二、正则表达式
bash shell本身不支持正则表达式,使用正则表达式的是shell的一些命令和工具,如grep,sed ,awk
bash可以使用正则表达式中的一些元字符实现通配的功能。
1、基本正则表达式中元字符:
* 区配*前面的那一个字符的0次或多次
如hel*o heo helo hello helllo hellllllllo ....
. 匹配任意一个字符(只匹配一个,可以是空格)
如ab. abc abd ab3 ab ....
^ 匹配行首
如^suda sudakjkjlkjlkjlk sudaokokookokook
$ 匹配行尾
如 suda$ kokokokosuda abababsuda
特殊的 :^$ 匹配一个空行
^.$ 匹配只有一个字符的空行
[] 匹配字符集合中的任意一个字符(只匹配一个)
如[1234] [1-4] 匹配1234的任意一个字符
[^1234] [^1-4] 取反,区配不是1234的任意一个字符
[A-z] [A-z]* 匹配任意一个英文单词
\ 用于转义元字符,使之成为普通字符
如\* 此时*表示一个普通字符
\<\> 用于精确匹配
如\<the>\ 表示精确匹配the这个单词,而不是them then 等等
\{\} 系统符号
\{n\} 匹配前面字符的n次
\{n,\} 匹配前面字符的至少n次
\{n,m\} 匹配前面字符的n-m次,至少n次,至多m次
如JO\{3\}B 匹配 JOOOB
如JO\{3,\}B 匹配 JOOOB ,JOOOOB ...
如JO\{3,6\}B 匹配 JOOOB ,JOOOOB JOOOOOB , JOOOOOOB
2、扩展的正则表达式中元字符的意义如下:
? 区配前面的那个字符的0次或1次
如JO?B 匹配 JB JOB JOOB
+ 匹配前面的那一个字符的1次或多次
如JO+B 匹配 JOOB JOOOB ....
| 与() 通常结合使用,表示一组可选 的字符集合
如 re(a|o|e)d 区配read reod reed
等同于 re[aoe]d