Debian

正則表達式量詞不適用於定位

  • November 23, 2015

這個輸出是不言自明的:

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]它正確匹配,但是如果我添加一個量詞它什麼都不匹配。量詞和也是如此,但似乎工作正常,這個表達式也是如此:tomcat**8**``[0-9]{1,2}``+``?``*

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

為什麼會發生這種情況,什麼是好的解決方法?

嘗試--regex(不帶“p”)而不是-r(又名--regexp)。這告訴locate使用擴展的正則表達式而不是基本的。

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

或者,escape{}with\使它們在基本正則表達式中特別。

引用自:https://unix.stackexchange.com/questions/233435