正規表現数量子は検索とうまく機能しません。

正規表現数量子は検索とうまく機能しません。

この出力は説明が非常に簡単です。

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 10Tomcatインストールディレクトリと一致する上位10項目を一覧表示しようとしています。正しく使用すると[0-9]一致しますが、数量子を追加すると何も一致しません。量子合計にも同じことが当てはまりますが、次の式と同様にうまく機能するようです。tomcat8[0-9]{1,2}+?*

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

なぜこれが起こり、良い解決策は何ですか?

答え1

(別名)の--regex代わりに(「p」なしで)試してみてください。これは、基本正規表現の代わりに拡張正規表現を使用することを意味します。-r--regexplocate

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

または、エスケープ{}withを使用して\デフォルトの正規表現内で特殊にします。

関連情報