为什么 find 中的正则表达式没有返回任何结果?

为什么 find 中的正则表达式没有返回任何结果?

命令

find . -maxdepth 1 -regextype posix-egrep -regex '.*/[a-z0-9\-\_\.]+\.(gz|deb)/' -exec echo {} \;

在包含以下文件的目录中未产生任何结果:

  1. google-chrome-stable_current_i386.deb
  2. rkhunter-1.4.2.tar.gz

[a-z0-9\-\_\.]+\.(gz|deb)尽管在以下网站上测试正则表达式时正则表达式,它与这些名称匹配。

为什么find没有返回任何结果?

答案1

两个原因:

  1. 您的正则表达式字符串以 结尾/。文件名不以 结尾/
  2. 显然正则表达式有一个错误:包含文字破折号(-) 在正则表达式括号表达式中,它必须是第一个字符,紧跟在[ (或初始 之后^,如果有的话) 之后,或最后一个字符,紧跟在 之前]。您不能将它放在中间,甚至在\它前面也不能。

但是也:

  1. ^-[]正则表达式括号表达式中仅有的特殊字符;您无需转义.——而且根本没有逃跑的理由_

所以你的正则表达式可以/应该是.*/[-a-z0-9_.]+\.(gz|deb)

相关内容