如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
当前回答
有关可用标志的列表:
grep --help
返回当前目录中此处的regexp文本的所有匹配项,以及相应的行号:
grep -rn "texthere" .
返回文本的所有匹配项,从根目录开始,具有相应的行号,忽略大小写:
grep -rni "texthere" /
此处使用的标志:
-r递归-n带输出的打印行号-我不理这个案子
其他回答
注意这个发现-当查找匹配的文件太多时,键入f | xargs grep任何类型的解决方案都会遇到“Argument list to long”错误。
最好的选择是grep-r,但如果不可用,请使用find-键入f-exec grep-H whatever{}\;相反
这应该是有效的:
grep -R "texthere" *
ag是我现在最喜欢的实现方式github.com/ggreer/the_silver_searcher。它基本上与ack相同,但还有一些优化。
这是一个简短的基准。我在每次测试前清除缓存(cfhttps://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
另一种语法递归地grep Linux系统上所有文件中的字符串
grep-irn“字符串”
-r表示递归搜索,在给定目录和子目录中搜索指定字符串,在文件、程序等中查找指定字符串
-不区分大小写可用于添加大小写颠倒的字符串
-n打印指定字符串的行号
注意:这会将大量结果打印到控制台,所以您可能需要通过管道过滤输出,并删除不太有趣的信息,它还会搜索二进制程序,因此您可能需要过滤一些结果
球状物**
使用grep-r是可行的,但可能会过度使用,尤其是在大型文件夹中。
对于更实际的用法,以下是使用globbing语法(**)的语法:
grep "texthere" **/*.txt
它只greps具有模式选择模式的特定文件。它适用于受支持的shell,如Bash+4或zsh。
要激活此功能,请运行:shopt-s globstar。
另请参阅:如何在Linux上查找包含特定文本的所有文件?
数字grep
对于Git版本控制下的项目,请使用:
git grep "pattern"
这要快得多。
里普雷普
对于较大的项目,最快的grepping工具是ripgrep,默认情况下递归地对文件进行grep:
rg "pattern" .
它建立在Rust的正则表达式引擎之上,该引擎使用有限自动机、SIMD和激进的文字优化,使搜索速度非常快。查看此处的详细分析。