2013-03-10 106 views
4

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

+5

你在'regex'和'glob'之间感到困惑。 – 2013-03-10 12:46:18

回答

8

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

Globs通常用于匹配文件名。你的shell自动执行的命令参数通配符扩展,这是你如何编写

ls *foo* 

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

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

+0

清楚地表明它!感谢您花时间去解决这个详细的答案。 – toddlermenot 2013-03-10 13:03:31

相关问题