从正则表达式中查找命令

从正则表达式中查找命令

我对正则表达式有疑问。

有两个命令。

find / -regex '.*[^-_./0-9a-zA-Z].*'

find /

如果我是对的,这两个命令应该输出相同的结果。因为,第一个命令有.*最先出现的正则表达式。这意味着“找到任何字符,并且它可以出现零个或多个”。这意味着所有文件名。因为文件名可以由任何字符组成,包括空格(“”),并且不可能出现零字符(这意味着文件没有名称)。所以,毕竟,我认为他们输出相同的结果。

但是当我将这些命令与 一起使用时| wc -l,这意味着“输出结果行”,结果是不同的。

我错过了什么吗?

答案1

下面是一个示例 -- .* 表示 0 个或多个任意字符。在第二种情况下,它匹配任何字符的 0,后跟非排除字符之一。

ls 
1  a  =a  ++a  a.0  a_1  B  b0

find .
.
./B
./=a
./b0
./a_1
./a
./1
./a.0
./++a

find . -regex '.*[^-_./0-9a-zA-Z].*'
./=a
./++a

答案2

.*后面跟着[^-_./0-9a-zA-Z]- 并且它不是可选的。因此,除了这些字符之一(字母、数字、、、和)之外的其他字符-应该_在文件名中出现一次./任何仅由这些字符组成的路径都不会被打印。

因此这些命令不需要输出相同的结果。

相关内容