与shell-globbing通配符和Regex混淆

时间:2009-08-24 17:57:40

标签: regex wildcard

reply启动。

  1. 如何仅使用正则表达式而不是通配符?
  2. 如果你可以使用正则表达式,你真的需要通配符和通配符?
  3. 正则表达式是从通配符演变而来的,反之亦然?

3 个答案:

答案 0 :(得分:6)

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

  
      
  1. 如何仅使用正则表达式而不是通配符?
  2.   

不要使用shell。编写一个Perl / Python / Ruby / [您选择脚本语言 - 这里]脚本来为您完成工作。它可能会更快,因为它不需要这么多。

  
      
  1. 如果你可以使用正则表达式,你真的需要通配符和通配符?
  2.   

没有。但是在大多数shell中,你都有正则表达式,所以你有全局。把它们想象成一个穷人的正则表达式。

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

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

答案 1 :(得分:5)

在手册页中描述:

  

-name pattern

     

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

换句话说,find可以使用shell glob模式中可用的模式。

手册页通常可以告诉你很多。 ;)

$ man find

了解更多信息。

答案 2 :(得分:0)

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

  

正则表达式

     

请注意   通配符模式不规则   表达式,虽然它们有点   类似。首先,他们匹配   文件名,而不是文本,和   其次,公约不是   相同:例如,在常规   表达式'*'表示零或更多   前面的东西的副本。现在   正则表达式有括号   否定的表达式   用'^'表示,POSIX已声明   通配符模式的效果   “[^ ...]”未定义。

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