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

时间:2011-05-06 16:34:57

标签: linux shell unix ftp grep

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

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

如果file content有类似

的内容
LMN20113456

我可以使用GREP吗?

Grep -ls "LMN2011*"   "LMN20113456"

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

5 个答案:

答案 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'