通配符笔记11

通配符
?字符代表单个字符。不能匹配空字符
$ ls ?.txt
a.txt b.txt
$ ls ??.txt
ab.txt

* 代表任意数量的字符,可以匹配空字符
# 输出所有文件 ls *
$ ls *.txt
a.txt b.txt ab.txt
$ ls a*.txt
a.txt ab.txt

[...]匹配方括号之中的任意一个字符,比如[aeiou]可以匹配五个元音字母
$ ls [ab].txt
a.txt b.txt
$ ls *[ab].txt
ab.txt a.txt b.txt

[start-end]表示一个连续的范围
$ ls [a-c].txt
a.txt b.txt c.txt
$ ls report[0-9].txt
report1.txt report2.txt report3.txt

[^...]等价[!...]表示匹配不在方括号里面的字符(不包括空字符)。
# 存在文件 a.txt、b.txt 和 c.txt
$ ls [^a].txt
b.txt c.txt
也可以使用连续范围的写法[!start-end]
$ echo report[!1-3].txt
report4.txt report5.txt 

{...} 表示匹配大括号里面的所有模式,模式之间使用逗号分隔
$ echo d{a,e,i,u,o}g
dag deg dig dug dog
它可以用于多字符的模式。
$ echo {cat,dog}
cat dog

{...}与[...]有一个很重要的区别。如果匹配的文件不存在,[...]会失去模式的功能,变成一个单纯的字符串,而{...}依然可以展开。
(1)通配符是先解释,再执行
Bash 接收到命令以后,发现里面有通配符,会进行通配符扩展,然后再执行命令。
$ ls a*.txt
ab.txt
命令的执行过程是,Bash 先将a*.txt扩展成ab.txt,然后再执行ls ab.txt。

(2)通配符不匹配,会原样输出。
Bash 扩展通配符的时候,发现不存在匹配的文件,会将通配符原样输出。这条规则对{...}不适用

(3)只适用于单层路径。
所有通配符只匹配单层路径,不能跨目录匹配,即无法匹配子目录里面的文件。或者说,?或*这样的通配符,不能匹配路径分隔符(/)。
匹配子目录里面的文件,可以这样
$ ls */*.txt

(4)可用于文件名。
文件名中有通配符时,使用''包裹
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值