3

由回复发起。

  1. 我怎样才能只使用正则表达式而不是通配符?
  2. 如果您可以使用正则表达式,您在哪里真正需要通配符和通配符?
  3. 正则表达式是否从通配符演变而来,反之亦然?
4

3 回答 3

6

我认为您的困惑是基于 shell-globbing 通配符(*字符)和正则表达式符号(*字符)之间的差异。正则表达式不是shell-globbing,它们更加强大和有用,但对于日常 shell 使用,通配符和 shell-globbing “足够好”。

  1. 我怎样才能只使用正则表达式而不是通配符?

不要使用外壳。编写一个 Perl/Python/Ruby/[your-choice-of-scripting-language-here] 脚本来为您完成这项工作。它可能会更快,因为它不必分叉那么多。

  1. 如果您可以使用正则表达式,您在哪里真正需要通配符和通配符?

不,但在大多数 shell 中,你没有正则表达式,所以你有 glob。将它们视为穷人的正则表达式。

  1. 正则表达式是否从通配符演变而来,反之亦然?

正则表达式来自集合论,特别是早期的文本编辑器(一个早期的 Unix 文本编辑器称为ed具有类似正则表达式的功能,然后在一个名为 的小程序中重新使用grep,您可能听说过)。我想通配符只是外壳的功能。它们并不难实现,因此 shell 编写者会相当快地添加它们,而且开销很小。

于 2009-08-24T20:00:05.460 回答
5

手册页中描述:

-名称模式

如果正在检查的路径名的最后一个组件与模式匹配,则为真。特殊的 shell 模式匹配字符([]*?)可以用作模式的一部分。这些字符可以通过用反斜杠 ( \) 转义来显式匹配。

因此,换句话说,可用于 shell glob 模式的模式可由find.

手册页通常可以告诉您很多信息。;)

$ man find

了解更多信息。

于 2009-08-24T18:02:16.930 回答
0

我最初的问题有一个错误的前提;它们是通配符,而不是正则表达式!Glob-program 处理通配符。

常用表达

请注意,通配符模式不是正则表达式,尽管它们有点相似。首先,它们匹配文件名,而不是文本,其次,约定不一样:例如,在正则表达式中,'*' 表示前面的内容的零个或多个副本。现在正则表达式具有括号表达式,其中否定由“^”指示,POSIX 已声明通配符模式“[^...]”的效果未定义。

解释不是100%彻底。例如,您可以轻松地将文件名与 Regex 匹配。

于 2009-08-24T19:32:39.477 回答