Os quantificadores Regex não estão funcionando bem com o locate

1

Esta saída é bastante autoexplicativa:

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:~$

Estou tentando listar as primeiras dez entradas ( -l 10 ) correspondentes ao diretório de instalação do tomcat. Se eu usar apenas [0-9] , ele corresponderá corretamente a tomcat8 , no entanto, se eu adicionar um quantificador [0-9]{1,2} , ele não corresponderá a nada. O mesmo vale para os quantificadores + e ? , mas o * parece funcionar bem, assim como a expressão:

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

Por que isso acontece e o que é uma boa solução?

    
por Tomáš Zato 02.10.2015 / 09:50

1 resposta

3

Teste --regex (sem um 'p') em vez de -r (também conhecido como --regexp ). Isso diz a locate para usar regexps estendidos em vez de básicos.

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

alternativamente, escape de { e } com \ para torná-los especiais na regex básica.

    
por 02.10.2015 / 09:56