通配符 globbing
globbing:文件名通配(整体文件名匹配,而非部分)
匹配模式:元字符
*:匹配任意长度的任意字符
ab*:ab开头的单词
*ab*:包含ab的单词
*ab:ab结尾的单词
*a*b*:包含a、b的单词
?:匹配任意单个字符
ab?:ab开头的三个字符的单词
??ab:ab结尾四个字符的单词
a?b:a开头、b结尾三个字符的单词
a?b?:a+任意字符+b+任意字符的四个字母组成的单词
[]:匹配指定范围内的任意单个字符
当LANG=C时,[a-z]其实是a,b,c…z,所有小写字母
当LANG=utf8时,[a-z]其实是a,A,b,B,c,C…y,Y,z,包括除z意外的所有字母
[a-Z]这个集合本身代表所有字母,包括大小写。
有几种特殊格式:(当LANG=utf8)
[a-z]:匹配字母,包括除Z意外的所有字母
[A-Z]:匹配单个大写字母
[0-9]:匹配数字
[a-z0-9]:匹配任意字母或数字
[[:upper:]]:所有大写字母
[[:lower:]]:所有小写字母
[[:alpha:]]:所有字母
[[:digit:]]:所有数字
[[:alnum:]]:所有的字母和数字
[[:space:]]:所有空白字符
[[:punct:]]:所有标点符号
[^]:匹配指定范围外的任意单个字符
[^]:匹配指定范围外的任意单个字符
[^[:upper:]] :非大写字母
[^0-9]:非数字
[^[:alnum:]]:非字母数字
实例
- 显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
ls -d /var/l*[[:digit:]]*[[:lower:]]
- 显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
ls -d /etc/[[:digit:]]*[^[:digit:]]
- 显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
ls -d /etc/[^[:alpha:]][[:alpha:]]*
- 在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
- 复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中
root@localhost var]# cp -r /etc/p*[^[:digit:]] /tmp/mytest1
- 复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
cp -r /etc/*.d /tmp/mytest2/
- 复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。
cp -r /etc/[mn]*.conf /tmp/mytest3
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/92058