基于文件名模式和文件内容列表的文件名?

问题描述 投票:36回答:5

如何使用grep命令基于外卡file name列出的所有文件以此为开端搜索"LMN2011*"

我要添加这些文件内容的另一个检查。

如果file content有一些东西一样

LMN20113456

我可以使用GREP这个?

Grep -ls "LMN2011*"   "LMN20113456"

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

linux shell unix ftp grep
5个回答
60
投票

grep的不使用“通配符”搜索 - 这是贝通配,比如* .JPG。 grep的使用“正则表达式”模式匹配。而在壳“*”的意思是“什么”,在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'

27
投票

它可以不通过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" ./

或者在所有文件中搜索开始与文件名“制作”:

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

7
投票
grep LMN20113456 LMN2011*

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

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

0
投票

查找/文件夹型的F -90 -mtime | grep的-E “(.TXT | .PHP |。公司| .root | .gif注意)” | xargs的LS -l> WWWlastActivity.log


0
投票

假设LMN2011*文件都在里面/home/me但跳过/home/me/temp或以下任何内容:

find /home/me -name 'LMN2011*' -not -path "/home/me/temp/*" -print | xargs grep 'LMN20113456'
© www.soinside.com 2019 - 2024. All rights reserved.