正则表达式量词不能很好地与locate配合使用

正则表达式量词不能很好地与locate配合使用

这个输出是相当不言自明的:

XXXXX@debianvirtualbox:~$ locate -r "^/var/lib/tomcat[0-9]/.*" -l 10
/var/lib/tomcat8/conf
/var/lib/tomcat8/lib
/var/lib/tomcat8/logs
/var/lib/tomcat8/webapps
/var/lib/tomcat8/work
/var/lib/tomcat8/webapps/ROOT
/var/lib/tomcat8/webapps/websight
/var/lib/tomcat8/webapps/ROOT/META-INF
/var/lib/tomcat8/webapps/ROOT/index.html
/var/lib/tomcat8/webapps/ROOT/META-INF/context.xml
jakub@maredadebianvirtualbox:~$ locate -r "^/var/lib/tomcat[0-9]{1,2}/.*" -l 10
XXXXX@debianvirtualbox:~$

我试图列出-l 10与 tomcat 安装目录匹配的前十个 ( ) 条目。如果我只是[0-9]正确使用它 matches ,但是如果我添加一个量词,它就不会匹配任何内容。量词和也是如此,但是似乎工作得很好,这个表达式也是如此:tomcat8[0-9]{1,2}+?*

^/var/lib/tomcat[0-9][0-9]*/.*

为什么会发生这种情况以及什么是好的解决方法?

答案1

尝试--regex(不带“p”)而不是-r(又名--regexp)。这告诉locate我们使用扩展的正则表达式而不是基本的。

locate --regex "^/var/lib/tomcat[0-9]{1,2}/" -l 10 

或者,使用 escape{}with\使它们在基本正则表达式中变得特殊。

相关内容