wildcard
1.准确地讲,wildcard是一种命令行的路径扩展功能,这与变量替换$和命令替换$( )是类似的,也就是命令行先对wildcard进行替换,再执行。牢记:wildcard只是作用于argument里的path部分
2.常见的wildcard:
- *:匹配0或多个任意字符
- ?:匹配单个任意字符
- [xyz]:匹配xyz中任意一个字符(必须有且只能有一个)
- [!xyz]:匹配除xyz之外的任意一个字符
- [a-z]:匹配a-z之间的任意一个字符(-的左右两边均有字符时才能表示一个范围,否则当作减号处理)
- {str1,str2,str3}:匹配str1,str2,str3中任意一个字符串(注意,左右两边不能有空格)
Tips:以*或?开头的wildcard不能匹配隐藏文件(以.开头)
re
1.re是一种规范化的字符串表达方式,主要用于某些文字处理工具之间。regular expression(re)和commamd-line一样,也分literal和meta。然而,不少re的meta字符是与shell的meta字符冲突的。譬如星号*,在re中表示匹配之前的零个或多个字符,而在shell meta中是wildcard(grep中的匹配字符串需要用引号包括也正是为了将其中的re与shell本身的meta区别)
2.re中的char.set(char.set的存在是为了便于修饰字符确定目标,譬如abc?和(abc)?是不一样的):
- abc :匹配abc三个连续的字符,视为三个char.set
- (abc) :匹配abc三个连续的字符的集合,视为一个char.set
- abc|xyz :匹配或abc或xyz这两个char.set之一
- [abc] :匹配单一字符,或a或b或c
- [^abc] :匹配单一字符,不为或a或b或c即可(与wildcard中的[!abc]相同)
- . :匹配单个任意字符(与wildcard中的?相同)
3.re中的meta:
- 锚点:用于标识于句子中的位置所在
- ^ :表示句首
- $ :表示句尾
- /< :表示词首
- /> :表示词尾
- 修饰字符:独立表示时不具有意义,需与前一个char set配合,表示char set出现的次数
- * :出现0或多次
- ? :出现0或1次
- + :出现1或多次
- {n} {n,} {n,m} :分别表示出现n次,出现n或n次以上,出现n到m次
grep和egrep的区别
相比grep,egrep多了以下几项功能:
- 支持?和+这两种meta
- 支持a|b
- 在处理{n,m}时,不需要加转义符/