当前位置:  开发笔记 > 编程语言 > 正文

在递归中查找文件中字符串/正则表达式匹配的最佳方法是什么?(UNIX)

如何解决《在递归中查找文件中字符串/正则表达式匹配的最佳方法是什么?(UNIX)》经验,为你挑选了4个好方法。

我不得不多次这样做,通常是在尝试查找使用变量或函数的文件时.

我记得过去使用xargs和grep这样做,但我想知道是否有更简单的方法.



1> Chris Jester..:
grep -r REGEX .

替换.为您要搜索的目录.


既然你要求"最好的"方式,我认为你不应该接受这个答案,而是Chas的答案.这不是最佳答案,因为`-r`不可移植.最好的答案是可移植的,在文件名中处理有趣的字符,并且在最坏的情况下只创建一些进程.这将是查斯的"发现".-type f -print0 | xargs -0 grep pattern`.完全POSIX和防弹.
@Jens:因为你喜欢迂腐,1.``xargs -0`在很长一段时间内都不便携,而且2. Chas's,而不是Chas'(人们的名字从不被视为复数).

2> Chas. Owens..:

执行此操作的便携方法*

find . -type f -print0 | xargs -0 grep pattern

-print0告诉find使用ASCII nuls作为分隔符并-0告诉xargs同样的事情.如果不使用它们,则会在名称中包含空格的文件和目录中出现错误.

*与grep -r,grep -R或grep --recursive相反,它只适用于某些机器.



3> rjray..:

这是我开始使用ack(http://petdance.com/ack/)代替grep的案例之一.从站点,您可以获得将其安装为Perl CPAN组件的说明,或者您可以获得可以在不处理依赖项的情况下安装的自包含版本.

除了默认为递归搜索这一事实外,它还允许您使用Perl-strength正则表达式,使用正则表达式来选择要搜索的文件等.它有一个令人印象深刻的选项列表.我建议访问该网站并查看它.我发现它非常易于使用,并且如果您使用它,还有将其与vi(m),emacs甚至TextMate集成的提示.



4> Gabriel Gili..:

如果您正在寻找字符串匹配,请使用

fgrep -r pattern .

这比使用grep更快.有关此主题的更多信息,请访问:http://www.mkssoftware.com/docs/man1/grep.1.asp

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有