由reply启动。
答案 0 :(得分:6)
我认为你的混淆是基于shell-globbing通配符(*
字符)和正则表达式符号(*
字符)之间的差异。 Regexes 不是 shell-globbing,它们更强大,更有用,但对于日常shell使用,通配符和shell-globbing都“足够好。”
- 如何仅使用正则表达式而不是通配符?
醇>
不要使用shell。编写一个Perl / Python / Ruby / [您选择脚本语言 - 这里]脚本来为您完成工作。它可能会更快,因为它不需要这么多。
- 如果你可以使用正则表达式,你真的需要通配符和通配符?
醇>
没有。但是在大多数shell中,你不都有正则表达式,所以你有全局。把它们想象成一个穷人的正则表达式。
- 正则表达式是从通配符演变而来的,反之亦然?
醇>
正则表达式来自集合论,特别是早期的文本编辑器(一个名为ed
的早期Unix文本编辑器具有类似正则表达式的功能,然后在名为grep
的小程序中重新使用,您可能听说过)。我想通配符只是shell的特征。它们不难实现,因此shell编写者可以相当快地添加它们,而且开销很小。
答案 1 :(得分:5)
在手册页中描述:
-name pattern
如果要检查的路径名的最后一个组件与pattern匹配,则为true。特殊的shell模式匹配字符(
[
,]
,*
和?
)可用作模式的一部分。可以通过使用反斜杠(\
)转义它们来明确匹配这些字符。
换句话说,find
可以使用shell glob模式中可用的模式。
手册页通常可以告诉你很多。 ;)
$ man find
了解更多信息。
答案 2 :(得分:0)
我最初的问题有一个错误的前提;他们是通配符,而不是正则表达式! Glob程序处理通配符。
正则表达式
请注意 通配符模式不规则 表达式,虽然它们有点 类似。首先,他们匹配 文件名,而不是文本,和 其次,公约不是 相同:例如,在常规 表达式'*'表示零或更多 前面的东西的副本。现在 正则表达式有括号 否定的表达式 用'^'表示,POSIX已声明 通配符模式的效果 “[^ ...]”未定义。
解释并非100%彻底。例如,您可以轻松地将文件名与Regex匹配。