根据文件名模式和文件内容列出文件名?

Posted

技术标签:

【中文标题】根据文件名模式和文件内容列出文件名?【英文标题】:List file names based on a filename pattern and file content? 【发布时间】:2011-08-20 08:08:15 【问题描述】:

如何使用 Grep 命令根据通配符 "LMN2011*" 搜索 file name,列出所有以此为开头的文件?

我想对这些文件内容添加另一项检查。

如果file content 有类似的东西

LMN20113456

我可以为此使用GREP 吗?

Grep -ls "LMN2011*"   "LMN20113456"

使用 shell 命令搜索文件名及其内容的正确方法是什么?

【问题讨论】:

【参考方案1】:
grep LMN20113456 LMN2011*

或者如果您想通过子目录递归搜索:

find . -type f -name 'LMN2011*' -exec grep LMN20113456  \;

【讨论】:

如何将结果文件名写入服务器中的文本文件 使用 grep -l 列出匹配的文件名而不是匹配的行,然后将输出重定向到文件。【参考方案2】:

Grep 不使用“通配符”进行搜索——这是 shell 通配符,例如 *.jpg。 Grep 使用“正则表达式”进行模式匹配。在 shell 中,'*' 表示“任何东西”,而在 grep 中则表示“匹配前一项零次或多次”。

更多信息和示例在这里:http://www.regular-expressions.info/reference.html

回答您的问题 - 您可以使用 grep 找到与某些模式匹配的文件:

find /somedir -type f -print | grep 'LMN2011' # that will show files whose names contain LMN2011

然后你可以搜索他们的内容(不区分大小写):

find /somedir -type f -print | grep -i 'LMN2011' | xargs grep -i 'LMN20113456'

如果路径可以包含空格,则应使用“零端”功能:

find /somedir -type f -print0 | grep -iz 'LMN2011' | xargs -0 grep -i 'LMN20113456'

【讨论】:

如何将结果文件名写入服务器中的文本文件 -print 不是必需的,它总是设置为 true。【参考方案3】:

找到/文件夹 -type f -mtime -90 | grep -E "(.txt|.php|.inc|.root|.gif)" | xargs ls -l > WWWlastActivity.log

【讨论】:

【参考方案4】:

不用find 也可以使用grep 的"--include" 选项来完成。

grep 手册页说:

--include=GLOB
Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).

所以要递归搜索文件中匹配特定模式的字符串,它看起来像这样:

grep -r --include=<pattern> <string> <directory>

例如,在所有 Makefile 中递归搜索字符串“mytarget”:

grep -r --include="Makefile" "mytarget" ./

或者在文件名中以“Make”开头的所有文件中搜索:

grep -r --include="Make*" "mytarget" ./

【讨论】:

很高兴知道“如何在没有找到的情况下完成”,真的,只是为了分享观点【参考方案5】:

假设 LMN2011* 文件在 /home/me 内,但在 /home/me/temp 或以下跳过任何内容:

find /home/me -name 'LMN2011*' -not -path "/home/me/temp/*" -print | xargs grep 'LMN20113456'

【讨论】:

以上是关于根据文件名模式和文件内容列出文件名?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gsutil 命令列出 gcs 存储桶中的所有文件(包含所有文件夹)以匹配文件内容中的特定字符串

使用find根据文件内容查找文件名

linux 查找文件和文件内容

(31)grep命令详解:查找文件内容

linux学习一

linux文件和目录处理命令