很多人刚接触Linux时搞不清楚shell的通配符和正则表达式的区别,在文本处理过程中可能会混淆两者的区别。其实通配符和正则表达式是有比较大的区别的,首先他们的使用场景不同,通配符通常用来匹配文本路径,正则表达式则是文本处理的一大利器。
这里有一些文章讲的很不错:
(这是讲python等开发语言的正则,和Linux的正则有点不同)
通配符是shell自带的用于匹配文件名的工具,而正则表达式则需要特定命令的支持才可以使用,如:grep、sed和awk(号称Linux三剑客)、vi/vim、perl等,这些都是处理文本的工具。
一、通配符
常见元字符:
*:匹配零或多个任意字符
?:匹配任意单个字符
[]:指定中括号内的多个字符,如:[rwc]或[r,w,c]都行
[^]或[!]:除了中括号内字符外匹配任一个字符
引用以下模式要在外面再套一个[],tr命令则不用(这是规定吗?)
[:digit:]:匹配任意一个数字
[:lower:]:任意小写字符
[:upper:]:任意大写字符
[:alpha:]:任意大小写字母
[:alnum:]:任意一个字母或数字
[:space:]:一个空格
[:punct:]:标点符号
二、正则表达式
这里不具体介绍正则表达式,只是说一下和通配符的区别
首先通配符没有次数匹配
*:匹配前面的字符零次或多次
.:匹配任意一个字符
?:前面的字符零次或一次,基本正则是\?
+:前面的字符至少一次,基本正则是\+
[]:和通配符完全一样
[^]:和通配符一样,但是没有[!]的写法