在Linux服务器上,我的文件夹中有几个文件,我的问题是:
如何使用正则表达式查找文件名,从foo或bar开始,以.properties结束。但不包括any.properties.仅foo-service.properties和bar.service.properties
/home/user/foo-service/src/main/resources/any.properties
/home/user/foo-service/src/main/resources/foo-service.properties
/home/user/foo-service/src/main/resources/bar-service.properties
尝试使用字符串查找:
find /home/user/foo-service/src/main/resources/ -maxdepth 1
-regextype posix-extended -regex .*(foo|bar).*.properties
但结果我有所有3个字符串,因为foo存在于路径(/foo-service/(中
我只想在路径中的最后一个斜杠之后找到,因此我需要文件的绝对路径。
您可以使用以下命令:
find /home/user/foo-service/src/main/resources/ -maxdepth 1
-regextype posix-extended -regex '.*/(foo|bar)[^/]*.properties$'
这里,(foo|bar)[^/]*.properties$
将匹配以foo
或bar
开始并以.properties
结束的任何文件名,同时匹配在foo
或bar
之后不是/
的任何字符中的0个或更多个。
所以这将匹配:
/home/user/foo-service/src/main/resources/foo-service.properties
/home/user/foo-service/src/main/resources/bar-service.properties
但不匹配:
/home/user/foo-service/src/main/resources/any.properties
由于我们在最后一个路径中的/foo
之后有一个/
字符。
您可以使用-name
选项来只匹配基本文件名,而不必处理整个路径名。使用-o
运算符匹配两个前缀:
find /home/user/foo-service/src/main/resources/ -maxdepth 1
( -name 'foo*.properties' -o -name 'bar*.properties' )