unix正则表达式中的星号(*)和点号星号(。*)

时间:2013-03-10 12:45:12

标签: regex unix

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

1 个答案:

答案 0 :(得分:9)

你在谈论UNIX中两种不同的模式, glob (通配符)和正则表达式

通常在匹配文件名时使用Globs。你的shell在命令参数上自动进行通配符扩展,这就是你可以写的方式

ls *foo*

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

另一方面,我们有正则表达式,用于模式匹配文本。通常,这些用于特定的实用程序,例如grepsedperl,它们理解这些模式,尽管有些shell具有采用正则表达式的上下文(例如Bash的${x/pat/sub})。正则表达式语法功能更强大,因此非常适合查看特定模式的大量文本。