我看到*
的通配符已在某些命令中使用,例如:find *.jpg
,这意味着找到以.jpg
结尾的所有文件。但是,在正则表达式中,.*
也表示任何字符的次数为0或更多次。那么,它们之间的区别是什么?何时使用*
以及何时.*
?
答案 0 :(得分:3)
在正则表达式中,*
是“零或更多”重复标记。 .
是“任何单个字符(有警告)”表达。
在find
中,*
字符是“任何”通配符,并不是真正的正则表达式字符。 ?
是此类搜索环境中的“任何单个字符”。
答案 1 :(得分:2)
文件名匹配模式(或 globs )和正则表达式是两个相似但不同的东西。
对于它们两者而言,大多数字符只是匹配自己,而某些特殊字符具有特殊含义,可以通过在它们前面添加反斜杠\
来抑制它们。
在文件名匹配模式中(由shell和find
命令使用),?
匹配任何单个字符,*
匹配零个或多个任意字符。 .
(句号)不是特殊字符;它只匹配文字.
字符。
在正则表达式中(由grep
使用,许多文本编辑器和大多数执行文本搜索的命令),.
匹配任何单个字符,*
表示零或更多发生在它之前的任何事情。
还有更多的东西。文件名匹配模式对名称以.
开头的“隐藏”文件有特殊规则,语法和规则可能因shell而异。正则表达式也有多种形式(例如grep
与egrep
,而不是Perl或PCRE)。