Bash 通配符简介

评论 0 浏览 0 2021-03-02

1. 概述

在 bash 中处理文件时,我们经常使用通配符来匹配文件名。Bash 会解释这些字符,并执行文件名扩展,这一过程也被称为 "globbing"。

在本教程中,我们将通过提供一些解释通配符及其用法的示例来介绍通配符的概念。

我们应该注意到,虽然通配符可能看起来与正则表达式相似,但它们本质上是不同的。

2. 匹配任意字符串

通常,我们将通配符与 ls 一起使用。假设我们的文件系统中有一个文件夹,其中包含一堆不同类型的文件。现在,如果我们想要获取所有文本文件的列表,我们可以 cd 到此文件夹并执行:

$ ls *.txt

在通配中,* 或星号字符代表任何给定长度的任何字符串。上面命令的输出可能如下所示:

test-2.txt test-3.txt test.txt

3. 匹配单个字符

其中* 可以匹配任意长度的字符串,而?则可以精确匹配一个字符。例如,我们可以使用一个问号列出所有名为 'test-' 的文本文件,后跟一个数字:

$ ls test-?.txt
test-2.txt test-3.txt

或者,我们可以列出名称恰好为四个字符的所有文本文件:

$ ls ????.txt
test.txt

4. 匹配一系列字符

我们了解了如何使用 *? 来匹配任何字符。假设我们有更多关于我们正在寻找的信息。例如,我们可能知道我们只对文件名中包含某些数字的文件感兴趣。这就是范围的用武之地。

范围在方括号内声明。例如,所有数字的范围表示为:

[0-9]

我们使用此模式和星号来搜索名称中带有数字的所有文件:

$ ls *[0-9]*
1234.dat    test-2.txt  test-3.txt  test-99.txt

范围可以应用于字母和数字:

  • [a-z] = 字母表中的所有小写字符
  • [A-Z] = 字母表中的所有大写字符
  • [a-zA-Z] = 字母表中的所有字符,无论大小写
  • [j-p] = 小写字符 jklmnop
  • [a-z3-6] = 小写字符或数字 3456

5.隐藏文件

默认情况下,隐藏的文件和文件夹不会显示在 ls 的输出中。要将通配符应用于隐藏的文件和文件夹,我们必须显式添加前导 . (点)。

例如:

$ ls *

在我们的主目录中可能会产生:

file.txt

然而:

$ ls .*

可能会显示:

.bashrc

六,结论

在本文中,我们介绍了文件名扩展的过程,也称为通配符。我们学习了如何应用 *? 字符分别匹配零个或多个字符或恰好一个字符。我们还学习了如何通过使用括号指定范围来执行更高级的通配符。

我们应该记住,虽然模式看起来很相似,但通配符不使用正则表达式。

最后更新2023-08-03
0 个评论
标签