在 Bash 中,如果需要模糊匹配文件名或目录名,就要用到通配符。下面为常用的通配符。
通配符 | 说明 |
---|---|
* | 匹配0或任意个字符 |
? | 匹配一个任意字符 |
[-] | 匹配中括号的字符。例如[a-b],匹配小写字母,只会匹配集合中的一个 |
[^] | 匹配除了中括号的一个字符。例如[^0-9],匹配除了数字的字符,只会匹配集合中的一个 |
{ab,ba} | 匹配其中一个字符串。例如匹配ab或ba |
区别1:
通配符:匹配文件名
正则表达式:匹配文件中的内容
误区:例1、查找文件名时,常用正则表达式
#查找mv开头文件,通配符用法
[root@VM_0_6_centos tmp]# ll -d mv*
drwxr-xr-x 2 root root 4.0K Feb 24 17:32 mv2
-rw-r--r-- 1 root root 0 May 14 12:07 mva
-rw-r--r-- 1 root root 0 May 14 12:09 mvabc
#如果正则用法,会查找不到文件
[root@VM_0_6_centos tmp]# ll -d mv.*
ls: cannot access mv.*: No such file or directory
例2、查找文件内容时,用的是正则,例如常用Linux三剑客之一的grep
#查找def开头的行
[root@VM_0_6_centos DCBreakfast]# grep ^def view.py
def effective_user(request):
def download_apk(request):
def ftpserver_version(request):
区别2:
通配符:匹配完整的文件名
正则表达式:匹配部分文本
例1:正则在abab字符串中查找a字符
[root@VM_0_6_centos tmp]# grep a mva
abab
区别3:
正则表达式的*和?量词和通配符不一样
通配符是在Shell中有特殊含义的字符,例如*是代表着匹配0或任意个字符,那么这些字符就无法代表它们本身。如果要使用这些特殊字符本身的意义,使用转义符反斜杠:\
参考“Shell中的通配符”https://www.jianshu.com/p/25f3d0cd5fdc