很多人刚接触Linux时搞不清楚shell的通配符和正则表达式的区别,在文本处理过程中可能会混淆两者的区别。其实通配符和正则表达式是有比较大的区别的,首先他们的使用场景不同,通配符通常用来匹配文本路径,正则表达式则是文本处理的一大利器。

这里有一些文章讲的很不错:

http://www.178linux.com/11356

http://www.voidcn.com/blog/drdairen/article/p-5797513.html (这是讲python等开发语言的正则,和Linux的正则有点不同)

通配符是shell自带的用于匹配文件名的工具,而正则表达式则需要特定命令的支持才可以使用,如:grep、sed和awk(号称Linux三剑客)、vi/vim、perl等,这些都是处理文本的工具。

一、通配符

常见元字符:

*:匹配零或多个任意字符

?:匹配任意单个字符

[]:指定中括号内的多个字符,如:[rwc]或[r,w,c]都行

[^]或[!]:除了中括号内字符外匹配任一个字符

引用以下模式要在外面再套一个[],tr命令则不用(这是规定吗?)

[:digit:]:匹配任意一个数字

[:lower:]:任意小写字符

[:upper:]:任意大写字符

[:alpha:]:任意大小写字母

[:alnum:]:任意一个字母或数字

[:space:]:一个空格

[:punct:]:标点符号

二、正则表达式

这里不具体介绍正则表达式,只是说一下和通配符的区别

首先通配符没有次数匹配

*:匹配前面的字符零次或多次

.:匹配任意一个字符

?:前面的字符零次或一次,基本正则是\?

+:前面的字符至少一次,基本正则是\+

[]:和通配符完全一样

[^]:和通配符一样,但是没有[!]的写法