Linux在文件管理方面提供了丰富的功能,例如通配符,它是一种用于匹配文件名的特殊字符。通配符在Linux中可以帮助我们更加方便和快捷地查找和操作文件。
1.命令行通配符
通配符是一种特殊语句,主要有星号(*)、问号(?)等表示,用来模糊搜索文件,当查找目录或文件时,可以使用通配符来代替一个或多个真正字符。
作用范围:目录和文件名。
常见通配符:常用通配符包括 *、? 、[ ]、 [^ ] 、[! ]和{},具体含义见下表。
字符 | 含义 |
* | 匹符配任意字符(任意长度和任意字符) |
? | 匹配单个的任意字符 |
[] | 匹配方括号中的任意一个,不能用于创建目录和文件 |
[^] | 匹配方括号中的任意一个字符或数字后进行取反,等同于[! ],表示范围可以".."或"—”,用于查找和删除目录和文件,不用于创建目录和文件 |
[!] | 匹配方括号中的任意一个字符或数字后进行取反, 等同于[^ ],表示范围可以".."或"—", 用于查找和删除目录和文件,不用于创建目录和文件 |
[?-?] | 匹配方括号范围内任意一个,用于查询、删除,但不能用于创建目录和文件 |
{string,string} | 匹配括号中的任意一个字符串,表示一个范围时,字符串之间个".." |
相信看了这个表,你还是有一点懵,没事,我们下面接着讲
1.1.*
星号(*)通常用于匹配任何字符,包括数字、字母和符号。你可以使用星号指定应用程序需要查找的字符相应位置的任何字符。
例如,如果要显示目录中所有的.c后缀的文件,则可以使用以下命令:
我们还可以将*放到中间去
如果你想放到前面也是可以的,
我们还可以借助*来删除文件
*可以匹配任意长度的任意字符!!怎么样,强大吧!
此外*可以匹配空字符!!!
1.2.?
这个就没有上面的*强大了,上面的是匹配任意长度的任意字符,但是这个?就是只能匹配1个任意字符(不包括空字符)
问号(?)通配符匹配文件名中单个字符。在文件名中,问号占用了字符位置,能够匹配任何字符。
我们来使用一下
我们还可以用它来删除文件
?
字符代表单个字符。如果匹配多个字符,就需要多个?
连用。
注意,?
不能匹配空字符。也就是说,它占据的位置必须有字符存在。
1.3.[]
中括号([])通配符:用于指定一个字符范围,匹配其中的任意一个字符。
我给大家看几个例子
- [abcd] 匹配abcd中任何一个字符,abcd也可以是其他任意不连续字符
- [a-z] 匹配a到z之间的任意一个字符,字符前后要连续,也可以使用连续数字[1-9]
例如,使用命令ll [abc]来列出文件名是a,b,c的文件,ll [a-c]也是一样的
我们也可以用它来删除
方括号([])通配符用于匹配指定字符集范围中的一个字符。如果需要匹配一小段字符集范围,可以使用该通配符。
还可以使用逗号来列举多个字符范围,例如[0-9a-f]表示数字0-9和小写字母a-f。
我们可以使用这个来删除
1.4.{}
花括号({})通配符提供一种在Linux中生成文件名的方法。若文件名中有几个不同的选项,就可以使用此通配符。它会自动将多个选项组合成唯一的字符串。
这个就比较有意思了
1.5.[^...]和[!...]
[^...]和[!...]表示匹配不在方括号里面的字符(不包括空字符)。这两种写法是等价的。
此外,下面这两种写法是一样的
1.6.{...}模式
表示匹配大括号里面的所有模式,模式之间使用逗号分隔。
注意不能使用-来标识连续字符,得用...来标识
1.7.注意点
通配符只适用于单层路径。
上面所有通配符只匹配单层路径,不能跨目录匹配,即无法匹配子目录里面的文件。或者说,?
或*
这样的通配符,不能匹配路径分隔符(/
)。
如果要匹配子目录里面的文件,可以写成下面这样。