linux中的通配符和正则表达式

总结:

通配符,即globbing,多用于文件名上,如ls,tar,find等命令

正则表达式,则主要针对文件内容,如grep,awk,sed等命令


通配符:

当查找文件时,可以使用通配符来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,也可以使用通配符。

例如:当你查看当前目录下所有以virtual开头的目录时

120601839.png

用*可以代替之后的所有字符。

再如:当你想删去当前目录下所有file开头的文件时

rm -rf file*


通配符的语法:

* 任意长度的任意字符
? 任意单个字符
^ 脱字符,取反,指定范围外的任意单个字符
[] 指定范围内的任意单个字符
[0-9] 所有的数字
[a-z] 所有的小写字母
[A-Z] 所有的大写字母
[a-zA-Z] 所有的字母
[0-9a-zA-Z]

所有的数字和字母

注:红色部分测试时有些问题。

122257839.png

在test目录下有两个文件,abc和ABC。当使用[a-z]测试时,两个文件都显示出来了,而不是只显示abc。

通配符中字符的集合:

[:digit:] 所有数字, 相当于0-9
[:lower:] 所有的小写字母
[:upper:] 所有的大写字母
[:alpha:] 所有的字母
[:alnum:] 相当于[0-9a-zA-Z]
[:space:] 空白字符
[:punct:] 所有标点符号

[:digit:]只是相当于0-9,在使用时,应使用[[:digit:]]

注:测试上面的例子,完全没有问题

123044925.png


正则表达式:

正则表达式(也称为“regex”或“regexp”)是一种用来描述文本模式的特殊语法。在 Linux 系统上,正则表达式通常被用来查找文本的模式,以及对文本流执行“搜索-替换”操作以及其它功能。

例如:找出/etc/passwd中以root开头的行

125202123.png

再如:将/etc/passwd中bash为/sbin/nologin的用户找出来

125620954.png


正则式的语法:

^ 锚定行首的符合条件的内容,用法格式“^pattern”
$ 锚定行尾的符合条件的内容,用法格式“pattern$”
. 匹配任意单个字符
* 匹配紧挨在其前面的字符任意次
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[a-z], [A-Z], [0-9] 同通配符

[:lower:],[:upper:],[:digit:]

同上
[:alpha:],[:alnum:],[:space:],[:punct:] 同上
\? 匹配紧挨在其前面的字符0次或1次
\{m,n\} 匹配其前面的字符至少m次,至多n次
\< 锚定词首,用法格式:\<pattern
\> 锚定词尾,用法格式:pattern\>
\(\) 分组,用法格式: \(pattern\)


另附上扩展正则表达式:

可在egrep中使用,只列出与标准正则表达式不一样的部分。

+ 匹配其前面的字符至少1次
? 匹配其前面的字符0次或1次
{m,n} 匹配其前面出现的字符至少m次,至多n次
() 分组,支持引用\1, \2
a|b 二选一
^ $ . * [] [^] \< \>
与标准正则式相同




你可能感兴趣的:(正则表达式,通配符,扩展)