首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何"grep“一个文件名而不是文件的内容?

我如何"grep“一个文件名而不是文件的内容?
EN

Stack Overflow用户
提问于 2012-04-18 23:01:12
回答 10查看 443.3K关注 0票数 165

grep用于在文件中进行搜索,以查看是否有任何行与给定的正则表达式匹配。然而,我遇到了这种情况--我想要编写一个与文件名本身(而不是文件内容)匹配的正则表达式。我将从系统的根目录运行此命令,以查找与正则表达式匹配的所有文件。

例如,如果我想查找所有以"f“开头并以.frm结尾的Visual Basic表单文件,我将使用正则表达式-

代码语言:javascript
复制
   "f[[:alnum:]]*\.frm"

grep能做到这一点吗?如果没有,有没有实用程序可以让我这样做?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-04-18 23:02:16

在这种情况下,您需要使用find而不是grep

您还可以将findgrepegrep结合使用

代码语言:javascript
复制
$ find | grep "f[[:alnum:]]\.frm"
票数 140
EN

Stack Overflow用户

发布于 2016-11-15 22:47:27

示例

代码语言:javascript
复制
find <path> -name '*FileName*'

来自manual:的

查找-name模式

文件名的基础(删除了前导目录的路径)与外壳模式模式匹配。由于前导目录被删除,因此考虑与-name匹配的文件名永远不会包含斜杠,因此"-name a/b“永远不会匹配任何内容(您可能需要改用-path )。元字符("*“、"?”和"[]")与".“在基本名称的开头(这是find-utils-4.2.2中的更改;请参阅下面的标准一致性一节)。要忽略某个目录及其下的文件,请使用-prune;请参阅-path描述中的示例。大括号并不被认为是特殊的,尽管包括Bash在内的一些shell在shell模式中给大括号注入了特殊的含义。文件名匹配是使用fnmatch(3)库函数执行的。不要忘了用引号将模式括起来,以防止shell对其进行扩展。

票数 91
EN

Stack Overflow用户

发布于 2014-08-12 05:10:27

正如Pablo所说,您需要使用find而不是grep,但是没有必要通过管道将find传递给grepfind内置了该功能:

代码语言:javascript
复制
find . -regex 'f[[:alnum:]]\.frm'

find是一个功能非常强大的程序,用于按名称搜索文件,并支持按文件类型搜索、深度限制、将不同的搜索项与布尔操作相结合,以及对找到的文件执行任意命令。有关详细信息,请参阅the find man page

票数 53
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10212192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档