在 Linux 中,如何在不编写脚本的情况下使用查找和正则表达式或类似方式来搜索具有多个“点”但 IGNORE 扩展名的文件。
例如,通过以下文件搜索将只返回第二个文件。在本例中,“.ext”是扩展名。
testing1234hellothisisafile.ext
testing.1234.hello.this.is.a.file.ext
该解决方案应使用文件名中的一个或多个点(忽略扩展点)。这也适用于任何文件,即具有任何文件扩展名
提前致谢
在 Linux 中,如何在不编写脚本的情况下使用查找和正则表达式或类似方式来搜索具有多个“点”但 IGNORE 扩展名的文件。
例如,通过以下文件搜索将只返回第二个文件。在本例中,“.ext”是扩展名。
testing1234hellothisisafile.ext
testing.1234.hello.this.is.a.file.ext
该解决方案应使用文件名中的一个或多个点(忽略扩展点)。这也适用于任何文件,即具有任何文件扩展名
提前致谢
因此,如果我理解正确,您希望获得名称中至少包含两个附加点的文件名。这会做:
$ find -regex ".*\.+[^.]*\.+[^.]*\.+.*"
./testing.1234.hello.this.is.a.file.ext
./testing1234.hellothisisafile.ext
$ find -regex ".*\.+[^.]*\.+[^.]*\.+[^.]*\.+.*"
./testing.1234.hello.this.is.a.file.ext
关键点检测部分是\.+
(至少一个点),加上分离任何东西(除了一个点,但前面的部分已经覆盖了它;防止贪婪匹配的安全措施)[^.]*
。它们一起构成了正则表达式的核心部分——我们不在乎之前或之后是什么,只是在某个地方有三个点。三个,因为当前目录中的一个也很重要——如果您要从其他地方搜索,请删除一\.+[^.]*
组:
$ find delme/ -regex ".*\.+[^.]*\.+[^.]*\.+[^.]*\.+.*"
delme/testing.1234.hello.this.is.a.file.ext
$ find delme/ -regex ".*\.+[^.]*\.+[^.]*\.+.*"
delme/testing.1234.hello.this.is.a.file.ext
在这种情况下,结果是相同的,因为名称包含很多点,但第二个正则表达式是正确的。