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

zod*_*zod 38 unix linux ftp shell grep

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

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

如果file content有一些东西喜欢

LMN20113456
Run Code Online (Sandbox Code Playgroud)

我可以用GREP它吗?

Grep -ls "LMN2011*"   "LMN20113456"
Run Code Online (Sandbox Code Playgroud)

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

jm6*_*666 62

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
Run Code Online (Sandbox Code Playgroud)

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

find /somedir -type f -print | grep -i 'LMN2011' | xargs grep -i 'LMN20113456'
Run Code Online (Sandbox Code Playgroud)

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

find /somedir -type f -print0 | grep -iz 'LMN2011' | xargs -0 grep -i 'LMN20113456'
Run Code Online (Sandbox Code Playgroud)


Jah*_*ooq 27

find使用grep "--include"选项可以完成它.

grep man page说:

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

因此,要在匹配特定模式的文件中对字符串进行递归搜索,它将如下所示:

grep -r --include=<pattern> <string> <directory>
Run Code Online (Sandbox Code Playgroud)

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

grep -r --include="Makefile" "mytarget" ./
Run Code Online (Sandbox Code Playgroud)

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

grep -r --include="Make*" "mytarget" ./
Run Code Online (Sandbox Code Playgroud)


Aoi*_*ife 7

grep LMN20113456 LMN2011*
Run Code Online (Sandbox Code Playgroud)

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

find . -type f -name 'LMN2011*' -exec grep LMN20113456 {} \;
Run Code Online (Sandbox Code Playgroud)