命令
find . -maxdepth 1 -regextype posix-egrep -regex '.*/[a-z0-9\-\_\.]+\.(gz|deb)/' -exec echo {} \;
在包含以下文件的目录中未产生任何结果:
google-chrome-stable_current_i386.deb
rkhunter-1.4.2.tar.gz
[a-z0-9\-\_\.]+\.(gz|deb)
尽管在以下网站上测试正则表达式时正则表达式,它与这些名称匹配。
为什么find
没有返回任何结果?
答案1
两个原因:
- 您的正则表达式字符串以 结尾
/
。文件名不以 结尾/
。 - 显然正则表达式有一个错误:包含文字破折号(
-
) 在正则表达式括号表达式中,它必须是第一个字符,紧跟在[
(或初始 之后^
,如果有的话) 之后,或最后一个字符,紧跟在 之前]
。您不能将它放在中间,甚至在\
它前面也不能。
但是也:
^
,-
和[
是]
正则表达式括号表达式中仅有的特殊字符;您无需转义.
——而且根本没有逃跑的理由_
。
所以你的正则表达式可以/应该是.*/[-a-z0-9_.]+\.(gz|deb)
。