通配符

Linux通配符是一种用于匹配文件和目录名的特殊字符,常用于命令行中执行文件操作和搜索。通配符允许你根据一定的模式匹配文件名,以便执行批量操作。以下是一些常见的Linux通配符:

  1. *:星号通配符代表零个或多个字符。例如,*.txt将匹配所有以.txt结尾的文件。

  2. ?:问号通配符代表一个字符。例如,file?.txt将匹配类似于file1.txtfileA.txt等文件。

  3. []:方括号通配符允许你指定一个字符集合,只匹配其中的一个字符。例如,[aeiou]将匹配任何一个元音字母,而[0-9]将匹配任何一个数字。

  4. [!][^]:在方括号内使用感叹号或脱字符,表示不匹配其中任何一个字符。例如,[!aeiou]将匹配不包含元音字母的字符。

  5. {}:花括号通配符允许你指定一组字符串,用逗号分隔。这对于创建多个匹配模式非常有用。例如,{file1,file2}.txt将匹配file1.txtfile2.txt

以下是一些通配符的示例用法:

  • *.jpg:匹配所有以.jpg结尾的文件。
  • file?.txt:匹配类似于file1.txtfileA.txt等文件。
  • [0-9]*.txt:匹配以数字开头并以.txt结尾的文件。
  • {cat,dog}*.txt:匹配以catdog开头,并以.txt结尾的文件。

请注意,通配符在不同的shell(例如Bash、Zsh、Fish等)中可能会有些许不同的行为,具体取决于你正在使用的shell。通配符通常与命令一起使用,例如lscpmvrm等,以执行文件操作或搜索文件。

通配符匹配文件名,正则表达式匹配文件内容

#常用通配符

*        #匹配0个或多个任意字符,但不包括'.'开头的文件,即隐藏文件
#匹配0个或1个任意字符
~        #当前用户的家目录
~azheng  #azheng的家目录
~+或.    #当前工作目录
~-或-    #上一个工作目录(cd切换目录时~-会静默切换,-切换后会打印目录名)
[0-9]    #匹配数字范围
[a-z]    #小写字母
[A-Z]    #大写字母
[xiang]  #匹配列表中的任何一个字符
[^xiang] #匹配列表中字符以外的字符

#另外还有在Linux系统中预定义的字符类:man 7 glob
[:digit:]  #十进制数字,[0-9]
[:lower:]  #任意小写字母,相当于[a-z]
[:upper:]  #任意大写字母
[:alpha:]  #代表任何英文大小写字符,即 A-Z, a-z
[:alnum:]  #任意字母和数字
[:blank:]  #空白字符(空格和制表符)
[:space:]  #水平和垂直的空白字符(比[:blank:]包含的范围广)
[:punct:]  #标点符号
[:print:]  #可打印字符
[:cntrl:]  #控制非打印字符(退格、删除、警铃...)
[:graph:]  #图像字符
[:xdigit:] #十六进制数字

范例

这些通配符都用在类Unix系统(如Linux)的shell中,用于匹配文件和目录。以下是这些通配符的含义:

  1. **/*.py

    • **匹配零个或多个目录级别。
    • /*匹配目录之后的任何文件。
    • .py匹配以.py为扩展名的文件。 这个通配符将匹配所有目录及其子目录中以.py为扩展名的Python文件。例如,dir1/dir2/file.pydir3/file.py都会匹配。
  2. **/?.py

    • **匹配零个或多个目录级别。
    • /匹配目录之后的一个字符。
    • ?.py匹配以一个字符开头,然后是.py为扩展名的文件。 这个通配符将匹配所有目录及其子目录中,文件名长度为2且以.py为扩展名的文件。例如,dir1/a.pydir2/b.py都会匹配。
  3. **/*.*

    • **匹配零个或多个目录级别。
    • /*匹配目录之后的任何文件。
    • *.*匹配带有扩展名的文件。 这个通配符将匹配所有目录及其子目录中,带有任何扩展名的文件。例如,dir1/dir2/file.txtdir3/file.jpg都会匹配。
  4. **/[a-z].??

    • **匹配零个或多个目录级别。
    • /匹配目录之后的一个字符。
    • [a-z]匹配一个小写字母。
    • .??匹配一个点后面跟着两个字符的文件扩展名。 这个通配符将匹配所有目录及其子目录中,文件名以小写字母开头,并且扩展名由两个字符组成的文件。例如,dir1/a.abdir2/b.cd都会匹配。

请注意,通配符的行为取决于你所使用的shell和文件系统,不同的shell可能会有略微不同的行为。