如何使用正则表达式查找并在最后一个斜杠后按模式匹配



在Linux服务器上,我的文件夹中有几个文件,我的问题是:

如何使用正则表达式查找文件名,从foobar开始,以.properties结束。但不包括any.properties.仅foo-service.propertiesbar.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$将匹配以foobar开始并以.properties结束的任何文件名,同时匹配在foobar之后不是/的任何字符中的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' )

相关内容

  • 没有找到相关文章

最新更新