递归搜索给定名称的文件,并查找特定短语的实例并显示该文件的路径

时间:2010-08-21 21:06:19

标签: bash file shell grep msys

我有一堆文件夹和子文件夹。除此之外,每个文件都包含一个名为index.yml的文本文件,其中包含有用的数据。我想搜索所有不同的index.yml文件以查找搜索字符串的实例。我必须能够看到几行上下文和找到的index.yml文件的目录。

这几乎可行,但它没有给我文件名:

cat `find . -name 'index.yml'`| grep -i -C4 mySearchString

我该怎么做并获取文件名?

使用msys,我被困在Windows上。注意我似乎没有完整的GNU grep,因此我无法按照其他SO问题的建议运行grep --excludegrep -R

2 个答案:

答案 0 :(得分:10)

试试这个:

find -name "index.yml" -exec grep -i -H -C4 pattern {} \;

注意:未在msys下进行实际测试。

答案 1 :(得分:0)

一种可能性(我不知道msys接受的是什么):

 find . -name index.yml -exec grep -i -C4 mySearchString /dev/null {} +

/dev/null用于确保至少有两个路径名,以便每次匹配时都会打印路径名。 grep的-H选项具有类似的效果。

-exec中的+ ... find构造导致多个路径名传递给命令的单个实例。如果未实施,则必须使用-exec ... \;