优秀的编程知识分享平台

网站首页 > 技术文章 正文

别再把shell中命令行的glob当做正则了

nanyue 2025-03-20 17:11:49 技术文章 8 ℃

Shell中的glob模式介绍


Shell中的glob模式是一种用于匹配文件路径名的通配符模式。它在许多Unix-like操作系统的shell中被广泛使用,包括Bash、Zsh和Fish等。Glob模式使用特殊字符来匹配文件名,可以执行通配符扩展,从而得到匹配的文件列表。

以下是一些常用的glob模式中的特殊字符和用法:

  • *:匹配任意数量的字符(包括零个字符)。
  • ?:匹配单个字符。
  • [characters]:匹配指定字符集中的任意一个字符。可以使用连字符-指定一个范围。
  • [!characters]或[^characters]:匹配不在指定字符集中的任意一个字符。
  • **:递归匹配任意数量的目录和子目录。
  • {pattern1,pattern2,...}:匹配多个模式之一。

下面是一些示例说明:

  1. 匹配以.txt结尾的所有文件:
  2. *.txt
  3. 匹配以字母a开头的任意文件名:
  4. a*
  5. 匹配名字的第一个字母为A或B的文件:
  6. [AB]*
  7. 匹配名字的第一个字母不为A或B的文件:
  8. [!AB]*
  9. 递归匹配所有目录下的.py文件:
  10. **/*.py
  11. 匹配文件名为file1.txt或file2.txt的文件:
  12. {file1,file2}.txt

需要注意的是,glob模式在不同的shell中可能会稍有差异,具体的语法和行为可能会有所不同。另外,当目录中不存在匹配的文件时,一些shell默认行为可能会导致直接将模式原样输出,而不是报错。

glob和regex的区别

Shell中的glob模式和正则表达式(regex)是用于模式匹配的两种不同的工具,它们有一些区别和适用场景。

  • 语法和通配符的级别:

Glob模式使用简单的通配符字符(如*、?、[])来匹配文件名或路径。它是一种比较简单的模式匹配工具,主要用于匹配文件名。

正则表达式是一种更为强大的模式匹配工具,使用复杂的语法来描述模式。它可以匹配更广泛的文本模式,包括文件名、文本内容等。

  • 匹配范围:

Glob模式主要用于匹配文件名或路径,通常在文件系统中使用。它只能对文件名进行匹配,无法直接匹配文件内容。

正则表达式可以用于匹配更广泛的文本内容,包括文件内容、文本字符串等。它可以通过正则表达式的规则来匹配文本中的模式。

  • 功能和灵活性:

Glob模式提供了一些简单的通配符功能,如*匹配任意字符,?匹配单个字符,[]匹配字符集等。它适合于简单的文件名匹配和路径匹配需求。

正则表达式提供了更丰富、更灵活的模式匹配功能。它可以使用元字符、量词、分组等来描述复杂的模式,可以进行更精确的文本匹配和提取。

  • 工具和环境:

Glob模式是Shell(如Bash、Zsh、Fish)的内置功能,可以直接在命令行中使用。它适合于在Shell脚本中进行简单的文件匹配和操作。

正则表达式是一种通用的模式匹配工具,在许多编程语言和文本编辑器中都有对应的正则表达式库或功能。它适合于在编程环境中进行更复杂的文本匹配和处理。

glob模式适合用于简单的文件名或路径匹配,而正则表达式适合用于更复杂的文本模式匹配和处理。根据具体的需求和使用场景,选择合适的工具可以更高效地完成相应的模式匹配任务。

了解更多shell编程实用技巧,快速了解一线大厂最佳实践

Tags:

最近发表
标签列表