根据文件名模式和文件内容列出文件名?
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'
【讨论】:
以上是关于根据文件名模式和文件内容列出文件名?的主要内容,如果未能解决你的问题,请参考以下文章