Unix正则表达式中的星号(*)和点星号(.*)

  • 本文关键字:正则表达式 Unix regex unix
  • 更新时间 :
  • 英文 :


我总是发现自己在UNIX中对这两个通配符的使用感到困惑。我理解星号只能用作regexp中的量词,但UNIX允许*在某些情况下,如ls命令,而在grep中,它应该仅用作量词。有没有什么规则可以指导我使用哪一个呢?

您讨论的是UNIX中两种不同的模式,glob(通配符)和正则表达式

Globs通常在匹配文件名时使用。您的shell在命令参数上自动执行通配符展开,这就是您可以编写

的方式。
ls *foo*

列出包含字符串foo的所有文件。Globs非常简单(忽略extglob):语法通常只支持*(任何字符)和?(任何一个字符)。由于shell的自动扩展,这些可以在任何地方使用,必须显式地抑制以避免不必要的匹配(例如,写grep '.*foo.*'以避免在模式中扩展*)。

另一方面,我们有正则表达式,用于模式匹配文本。通常,它们与特定的实用程序一起使用,如grep, sedperl,它们理解这些模式,尽管一些shell具有接受regex的上下文(例如Bash的${x/pat/sub})。正则表达式语法要强大得多,这使得它非常适合在大量文本中查找特定模式。

最新更新