shell中的通配符(元字符),表示不是本意,由shell来解析
常用的元字符有:
* 匹配任意多个字符
? 匹配任意一个字符
[] 匹配括号中任意一个字符
转义符,让元字符回归本意
{} 集合 touch file{1..5} mkdir -p /home/{333/{a,b},444}
() 在子shell中执行,不影响当前shell,(umask 077;touch file01)
正则表达式元字符 由各种执行模式匹配操作的程序来解析,比如vi、grep、sed、awk,在大多数程序中,正则表达式都被置于两个正斜杠之间。它将匹配被查找到行中任何位置出现的相同模式,在正则表达式中,元字符式最重要的概念。
vim示例:
cat a.txt
tom anatomy tomatos tomorrow
:1,$ s/tom/David/g #如tom、anatomy、tomatos、tomorrow中的“tom”都被替换了,而Tom却没有替换
:1,$ s/<[Tt]om>/David/g #<>表示匹配一个单词,单词前后可以有符号,但是不能出现任何单词,只有tom被替换,其余都未替换。
基本正则表达式元字符
元字符 功能 示例
^ 行首定位符 ^love
$ 行尾定位符 love$
. 匹配单个字符 l..e
* 匹配前导符0次到多次 ab*love
.* 匹配任意多个字符
[] 匹配指定范围内的一个字符 [lL]ove
[ - ] 匹配指定范围内的一个字符 [a-z]ove
[^] 匹配不在指定组内的字符 [^a-z]ove
用来转义元字符 love.
< 词首定位符 <love
> 词尾定位符 love>
(..) 匹配稍后使用的字符的标签 :3,9 s/(.*)/#1/
x{m} 字符x重复出现m次 0{3}
x{m,} 字符x重复出现m次以上 0{2,}
x{m,n} 字符x重复出现m到n次 1{3,5}
扩展正则表达式元字符
+ 匹配一个或多个前导字符 [a-z]+ove
? 匹配0个或1个前导字符 lo?ve
a|b 匹配a或b love|hate
() 组字符 love(able|rs)ov+ ov+ (ov)+
(...)(...)12 标签匹配字符 (love)able1er
x{m} 字符x重复m次 o{5}
x{m,} 字符x重复至少m次 o{5,}
x{m,n} 字符x重复m到n次 o{5,10}
*、?、+、{}不能单独存在,为别人而存在。
Love* 0到多次
Love? 0到1次
Love+ 1到多次
Love{2} 2次
Lo(ve)* ve匹配0到多次
Lo(ve)? ve匹配0到1次
Lo(ve)+ ve匹配1到多次
Lo(ve){2} ve匹配2次