总字数 530
预计阅读时间 2 分钟
bash当中的通配符可以看做是原始的正则表达式
不如之后出现的正则表达式功能强大, 规则相对简单一些
可以在命令行或者shell编程当中使用
? 字符
代表任意的单个字符
比如
1 | ls a?.txt |
也就是筛选文件名是两个字符, 扩展名是txt, 且第一个字符为a的
* 字符
代表任意数量的任意字符
比如
1 | ls a*.txt |
也就是筛选文件名第一个字符为a的, 扩展名是txt的文件
[…] 模式
匹配方括号当中的任意 一个字符
或者一个连续的范围当中的 一个字符
1 | # 匹配文件 ab.txt ac.txt |
连续范围根据字符编码确定
[^…]和[!…]
表示匹配不在方括号当中的 一个字符
1 | # 匹配文件 ac.txt ad.txt等 |
也可以使用连续的范围, 方式同上
{…}模式
可以匹配大括号当中所有的模式, 模式之间用逗号分隔
1 | ls a{a,b,c,d,ee}.txt |
可以看到是匹配所有的模式, 而不是其中任意一个
使用ls会提示无法找到该文件
而使用echo会直接输出这些模式的匹配结果
1 | # 大括号可以进行嵌套 |
{…}与[…]有一个很重要的区别。如果匹配的文件不存在,[…]会失去模式的功能,变成一个单纯的字符串,而{…}依然可以展开。
1 | # 不存在 a.txt 和 b.txt |
{start..end} 模式
匹配连续范围的所有情况 ( 注意中间是两个点 )
比如
1 | # 匹配a.txt b.txt c.txt |