这个输出是相当不言自明的:
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\
使它们在基本正则表达式中变得特殊。