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

zc0qhyus  于 2023-04-29  发布在  Unix
关注(0)|答案(5)|浏览(239)

我如何使用grep命令搜索file name的基础上的通配符"LMN2011*"列出所有以此为开始的文件?
我想对这些文件内容添加另一个检查。
如果file content有一些东西

LMN20113456

我可以使用grep吗?

grep -ls "LMN2011*"   "LMN20113456"

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

drnojrws

drnojrws1#

Grep不使用“通配符”进行搜索--这是shell globbing,比如 。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'

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

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

hgc7kmma2#

不使用find也可以通过使用grep的"--include"选项来完成。
grep man page说道:

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

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

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

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

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

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

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

v09wglhw3#

grep LMN20113456 LMN2011*

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

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

zyfwsgd64#

find /folder -type f -mtime -90|grep -E“(.文本|.php|.inc|.root|.gif)”|xargs ls -l〉WWWlastActivity。原木

mec1mxoz

mec1mxoz5#

假设LMN2011*文件位于/home/me内部,但跳过/home/me/temp或以下文件:

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

相关问题