一、通配中的元字符的意义如下(不使用正则表达式):

* 表示任意多的任意字符

? 表示一个任意字符

^ 表示取反

[] 同正则表达式的用法

{} 表示一组表达式的集合 {}中表达式是或的关系

如 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