简要地说,正则表达式主要使用在对文件
内容的匹配上,而通配符主要是用在文件名的匹配上,可以
用这种方法来帮助区别二者。
1.通配符:英文wildcard,通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符。2.正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。通配符与正则表达式很容易混淆,首先要明白二者是不同的,个人感觉通配符用于Linux的shell命令(如文件名相关操作)中,而正则表达式用于文本内容中的字符串搜索和替换等。通配符是Linux系统本身就支持的,而正则表达式用于vim编辑器或awk程序,这些文本处理工具正是由于支持正则表达式才变得强大。
二类型
1.通配符
*
星号,匹配任何字符?
问号,匹配任意一个字符[]
中括号,匹配括号中的一个字符
星号(*)
可以使用星号代替0个或多个字符。如果正在查找以AEW开头的一个文件,但不记得文件名其余部分,可以输入AEW*,查找以AEW开头的所有文件类型的文件,如AEWT.txt、AEWU.EXE、AEWI.dll等。要缩小范围可以输入AEW*.txt,查找以AEW开头的所有文件类型并.txt为扩展名的文件如AEWIP.txt、AEWDF.txt。
问号(?)
可以使用问号代替一个字符。如果输入love?,查找以love开头的一个字符结尾文件类型的文件,如lovey、lovei等。要缩小范围可以输入love?.doc,查找以love开头的一个字符结尾文件类型并.doc为扩展名的文件如lovey.doc、loveh.doc。
通配符包括星号“*”和问号“?”
星号表示匹配的数量不受限制,而后者的匹配字符数则受到限制。这个技巧主要用于英文搜索中,如输入““computer*”,就可以找到“computer、computers、computerised、computerized”等单词,而输入“comp?ter”,则只能找到“computer、compater、competer”等单词。 2.正则表达式
元字符 | 作用 |
---|---|
* | 前一个字符匹配0次或任意多次 |
. | 匹配除了换行符以外任意一个字符 |
^ | 匹配行首。例如:^helloworld会匹配以helloworld开头的行 |
$ | 匹配行尾。例如:helloworld$会匹配以helloworld结尾的行 |
[] | 匹配中括号里的任意指定的一个字符,但只匹配一个字符 |
[^] | 匹配除中括号以外的任意一个字符 |
\ | 转义符,取消特殊含义 |
{n} | 表示其前面的字符恰好出现n次 |
{n,} | 表示其前面的字符出现不小于n次 |
{n,m} | 表示其前面的字符至少出现n次,最多出现m次 |
三.举例
1.正则表达式
^ 匹配行首
$ 匹配行尾
. 匹配任意字符
* 匹配*之前的字符0次或者多次
ls | grep “^h.n”
匹配的是以h开头的第二个字符为任意字符,第三个字符为n的所有文件
ls | grep "^h.n*"
匹配的是以h开头的第二个字符为任意字符,第三个字符为n的0次和2次
因为,hjkkk这个文件的第三个字符为k不为n,*匹配的时候将n匹配0次的时候也就是第三个字符不为n也将之匹配并输出,至于hrnkkk和hungss第三个字符都出现一次,所有grep顺利将其匹配输出
2.通配符
?代表匹配任意单个字符
* 代表匹配任意字符的组合也也可以匹配单个字符
特别注意的是*在正则表达式中个通配符中使用的不同