我如何用grep递归?

我如何递归grep的所有目录和子目录?

find . | xargs grep "texthere" *

--------------解决方案-------------

grep -r "texthere" .

如果你知道你想要的文件的扩展名或模式,另一种方法是使用--include选项:

grep -r --include "*.txt" texthere .

您还可以提到要排除的文件与--exclude

如果您通过代码经常搜索,银(银搜索器)是一个更快的替代到grep,这是定制的搜索代码。 例如,它是递归的默认,并自动忽略文件和目录所列.gitignore所以你不必守传球同样繁琐排除选项给grep或找到。

也:

find ./ -type f | xargs grep "foo"

但grep的-r是一个更好的答案。

或安装ACK,如果你想有一个更快的方法,并且正在做这个有很多。

我现在总是使用(甚至在Windows上使用牌九 - GNU在Windows上):

grep --include="*.xxx" -nRHI "my Text to grep" *

这包括以下选项:

--include=PATTERN

递归的目录只搜索文件匹配PATTERN

-n, --line-number

前缀输出的每一行与在其输入文件中的行号。

-R, -r, --recursive

阅读每一个目录,递归下的所有文件; 这等同于-d recurse选项。

-H, --with-filename

打印的文件名每场比赛。

-I

处理二进制文件,就好像它未包含匹配的数据;
这相当于--binary-files=without-match选项。

我可以添加' i -nRHIi如果我想不区分大小写的结果。

我可以得到:

/home/vonc/gitpoc/passenger/gitlist/github #grep --include="*.php" -nRHI "hidden" *
src/GitList/Application.php:43: 'git.hidden' => $config->get('git', 'hidden') ? $config->get('git', 'hidden') : array(),
src/GitList/Provider/GitServiceProvider.php:21: $options['hidden'] = $app['git.hidden'];
tests/InterfaceTest.php:32: $options['hidden'] = array(self::$tmpdir . '/hiddenrepo');
vendor/klaussilveira/gitter/lib/Gitter/Client.php:20: protected $hidden;
vendor/klaussilveira/gitter/lib/Gitter/Client.php:170: * Get hidden repository list
vendor/klaussilveira/gitter/lib/Gitter/Client.php:176: return $this->hidden;
...

在POSIX系统中,你找不到-r参数grep和你grep -rn "stuff" .将不能运行,但如果你使用find命令将:

find . -type f -exec grep -n "stuff" {} \; -print

所议定SolarisHP-UX

只是这些文件可能是有用的太

grep -r -l "foo" .

这应该工作:

grep -R "texthere" *

股份公司是我喜欢的方式,现在github.com/ggreer/the_silver_searcher做到这一点。 它基本上是同样的事情,ACK,但有一些更多的优化。

下面是一个简短的基准。 我清除缓存每次测试之前(CF http://askubuntu.com/questions/155768/how-do-i-clean-or-disable-the-memory-cache)

ryan@3G08$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
3
ryan@3G08$ time grep -r "hey ya" .

real 0m9.458s
user 0m0.368s
sys 0m3.788s
ryan@3G08:$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
3
ryan@3G08$ time ack-grep "hey ya" .

real 0m6.296s
user 0m0.716s
sys 0m1.056s
ryan@3G08$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
3
ryan@3G08$ time ag "hey ya" .

real 0m5.641s
user 0m0.356s
sys 0m3.444s
ryan@3G08$ time ag "hey ya" . #test without first clearing cache

real 0m0.154s
user 0m0.224s
sys 0m0.172s

需要注意的是find . -type f | xargs grep whatever find . -type f | xargs grep whatever find . -type f | xargs grep whatever种类的解决方案会碰上“参数列表长”的错误时,有相匹配的发现太多的文件。

最好的办法是grep -r但如果不可用,用find . -type f -exec grep -H whatever {} \; find . -type f -exec grep -H whatever {} \;代替。

分类:UNIX 时间:2015-03-15 人气:2
本文关键词: UNIX中,grep
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.821 (s). 10 q(s)