GNU grep & find -regex:为什么是 .正则表达式中需要,为什么我不能使用 POSIX 字符类?

GNU grep & find -regex:为什么是 .正则表达式中需要,为什么我不能使用 POSIX 字符类?

我曾是尝试在某个目录中查找不符合类 UNIX 系统命名准则的文件

与 find 命令一起使用时find <dir> -regex '.*[^-_./0-9a-zA-Z].*' 返回感兴趣的文件

我对上面命令行的问题是:

  1. 为什么我们需要任意一个字符.之前的元字符零个或多个 *元字符分别位于正则表达式的开头和结尾,以便按预期工作。当我最初尝试时find <dir> -regex '*[^-_./0-9a-zA-Z]*'没有返回任何结果。
  2. 此外,如果我将character ranges正则表达式中的 替换为与POSIX character classes其他所有内容相对应的内容:find <dir> -regex '.*[^-_./[:digit:][:lower:][:upper:]].*'它不会返回任何内容。为什么会这样?

蒂亚!

答案1

  1. *在正则表达式语法中是量词应用于前一个正则表达式原子(在本例中为.)。这是不是它本身是一个“零个或多个元字符”,就像 shell 模式匹配语法(又名“globbing”)中一样。

  2. 可能是默认 Emacs 正则表达式类型的特殊之处 -例如,如果您想要更熟悉的行为,请尝试-regextype posix-basic或。-regextype egrep

相关内容