跳到内容

正则表达式/Shell 正则表达式

来自 Wikibooks,开放世界中的开放书籍

Unix shell 识别glob 语法,用于文件名替换。使用 ksh 和 bash 的extglob 扩展,其表达能力等同于基本形式的正则表达式。

运算符
运算符 效果
? 钩子运算符指定任何单个字符。
[ ] 方括号允许将单个字符与字符列表或字符范围匹配。
[! ] 补码方括号允许匹配不在字符列表或字符范围内的单个字符。GNU bash 支持的非标准等效项是插入符号语法 [^ ]。
* 星号指定匹配零个或多个字符。
?(pattern-list) 匹配给定模式的零个或一个出现次数。extglob 扩展。
*(pattern-list) 匹配给定模式的零个或多个出现次数。extglob 扩展。
+(pattern-list) 匹配给定模式的一个或多个出现次数。extglob 扩展。
@(pattern-list) 匹配给定模式中确切的一个。extglob 扩展。
!(pattern-list) 匹配除给定模式之外的任何内容。extglob 扩展。

与通用正则表达式的区别是

  • 星号和钩子运算符的含义不同。
  • 在 POSIX 标准中,补码方括号使用感叹号 (!) 形成,而不是插入符号 (^)。一些 shell(例如 GNU bash)允许使用插入符号作为扩展。
  • extglob 扩展是非标准的。它们仅在 Korn shell(默认情况下启用)和 GNU bash(通过 shopt -s extglob 启用)中可用。

在工具中的使用

[编辑 | 编辑源代码]

使用此正则表达式语法的工具和语言包括

  • 对于一般的glob 语法,所有 POSIX “bourne-compatible” shell。
  • 对于extglob 部分,Korn shell 和 bash。
华夏公益教科书