文件名通配符
提示:在Windows中通常将一些正则表达式的基本字符称为通配符,而在Linux操作系统中人们则将这些基本字符称为元字符。使用多个元字符组成的查找表达式称为匹配模式,使用匹配模式查找的过程称为(模式)匹配。
1、单字符匹配元字符“?”
元字符“?”表示匹配文件名中任意一个字符,连续使用多个元字符“?”可以表示多个任意字符。
(1)例如要查看有两个字符且第一个字母是a的文件:
[root@localhost zhu]# ls -l a? -rw-r--r-- 1 root root 0 Dec 6 09:46 ab -rw-r--r-- 1 root root 0 Dec 6 09:46 ac -rw-r--r-- 1 root root 0 Dec 6 09:46 ad
(2)也可以使用多个“?”,例如要查看由字母a和任意两个字符组成的文件:
[root@localhost zhu]# ls -l a?? -rw-r--r-- 1 root root 0 Dec 6 09:49 abc -rw-r--r-- 1 root root 0 Dec 6 09:49 acd -rw-r--r-- 1 root root 0 Dec 6 09:49 add
(3)查看所有由4字符组成且第3个字符是c的文件:
[root@localhost zhu]# ls -l ??c? -rw-r--r-- 1 root root 0 Dec 6 09:47 abcd
2、多字符匹配元字符“*”
元字符“*”表示匹配文件名中的任意字符串。匹配的字符串长度可以是0-n。
(1)查看以字母c结尾的文件:
[root@localhost zhu]# ls -l *c -rw-r--r-- 1 root root 0 Dec 6 09:49 abc -rw-r--r-- 1 root root 0 Dec 6 09:46 ac
(2)查看所有以a开头并以c结尾的文件:
[root@localhost zhu]# ls -l a*c -rw-r--r-- 1 root root 0 Dec 6 09:49 abc -rw-r--r-- 1 root root 0 Dec 6 09:46 ac
(3)元字符混合使用:
[root@localhost zhu]# ls -l *c? -rw-r--r-- 1 root root 0 Dec 6 09:47 abcd -rw-r--r-- 1 root root 0 Dec 6 09:49 acd
(4)查看第3个字符为c的所有文件:
[root@localhost zhu]# ls -l ??c* -rw-r--r-- 1 root root 0 Dec 6 09:49 abc -rw-r--r-- 1 root root 0 Dec 6 09:47 abcd
3、字符范围匹配符“[]”
范围匹配符“[]”通常用于匹配一个字符范围,其表现形式可以是减号“-”,表示字母或数字的范围;也可以是几个字符的组合,表示这几个字符中的任一个。
(1)范围匹配符中出现几个字符的组合,如下,表示以a开头或者以b开头或者以c开头或者以d开头或者以e开头的所有文件:
[root@localhost zhu]# ls -l [abcde]* -rw-r--r-- 1 root root 0 Dec 6 09:46 ab -rw-r--r-- 1 root root 0 Dec 6 09:49 abc -rw-r--r-- 1 root root 0 Dec 6 09:47 abcd -rw-r--r-- 1 root root 0 Dec 6 09:46 ac -rw-r--r-- 1 root root 0 Dec 6 09:49 acd -rw-r--r-- 1 root root 0 Dec 6 09:46 ad -rw-r--r-- 1 root root 0 Dec 6 09:49 add
(2)查看以a开头并且倒数第二个字符是cde中任一个的所有文件:
[root@localhost zhu]# ls -l a*[cde]? -rw-r--r-- 1 root root 0 Dec 6 09:47 abcd -rw-r--r-- 1 root root 0 Dec 6 09:49 acd -rw-r--r-- 1 root root 0 Dec 6 09:49 add
(3)使用符号“-”可以匹配字母或数字范围中的任意一个:
[root@localhost zhu]# ls -l *[0-9]* -rw-r--r-- 1 root root 0 Dec 6 10:06 a0_test -rw-r--r-- 1 root root 0 Dec 6 10:06 zhu3_test
(4)查看所有由两个字符组成,且第二个字符是字母的文件:
[root@localhost zhu]# ls -l ?[a-Z] -rw-r--r-- 1 root root 0 Dec 6 09:46 ab -rw-r--r-- 1 root root 0 Dec 6 09:46 ac -rw-r--r-- 1 root root 0 Dec 6 09:46 ad -rw-r--r-- 1 root root 0 Dec 6 10:08 eA -rw-r--r-- 1 root root 0 Dec 6 10:08 tX -rw-r--r-- 1 root root 0 Dec 6 10:08 yZ
上面的命令中,[a-Z]表示所有字母,也可以用[a-zA-Z]表示所有字母。
4、排除范围匹配符“[!]”或者“[^]"
排除范围匹配符“[!]”表示不匹配符号内出现的字符组合或字母数字范围。使用时,感叹号!只能放在要排除的字符串首。
(1)查看只有两个字符并以数字开头且第二个字符不是数字的文件:
[root@localhost zhu]# ls -l [0-9][!0-9] -rw-r--r-- 1 root root 0 Dec 6 10:15 3d
(2)查看只有两个字符且两个字符都不是字母的文件:
[root@localhost zhu]# ls -l [!a-Z][!a-Z] -rw-r--r-- 1 root root 0 Dec 6 10:16 %3 -rw-r--r-- 1 root root 0 Dec 6 10:16 34