如何使用Grep命令根据外卡file name
搜索"LMN2011*"
,列出所有以此为开头的文件?
我想在这些文件内容上添加另一项检查。
如果file content
有类似
LMN20113456
我可以使用GREP
吗?
Grep -ls "LMN2011*" "LMN20113456"
使用shell命令搜索文件名及其内容的正确方法是什么?
答案 0 :(得分:59)
Grep不要使用“通配符”进行搜索 - 这是shell globbing,比如* .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'
答案 1 :(得分:25)
使用grep的find
选项也可以在没有"--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" ./
答案 2 :(得分:7)
grep LMN20113456 LMN2011*
或者如果要通过子目录递归搜索:
find . -type f -name 'LMN2011*' -exec grep LMN20113456 {} \;
答案 3 :(得分:0)
find / folder -type f -mtime -90 | grep -E “(.txt | .php | .inc | .root | .gif)”| xargs ls -l&gt; WWWlastActivity.log
答案 4 :(得分:0)
假设LMN2011*
文件位于/home/me
内但跳过/home/me/temp
或以下内容的任何内容:
find /home/me -name 'LMN2011*' -not -path "/home/me/temp/*" -print | xargs grep 'LMN20113456'