Unix命令在所有文件中搜索文本字符串

时间:2012-06-25 10:07:51

标签: macos bash unix find grep

如何让unix在所有文件中搜索字符串“hello”?

我尝试了以下但是不起作用:

sudo grep "hello" | find / -name "*" 2>/dev/null

有没有人有其他想法?

谢谢。

3 个答案:

答案 0 :(得分:27)

也许这个?

sudo cd / && grep -rn "hello" *

编辑:当然不需要'n'选项 - 它只显示行号,我发现它很好。 'r'选项告诉grep在目录中执行递归搜索。

答案 1 :(得分:10)

使用

grep -r 'pattern' /

如果grep支持-r,(GNU grep支持);如果不使用

find / -type f -exec grep 'pattern' {} +

如果find支持-exec +,请使用

find / -type f -printf '%p\0' | xargs -0 grep 'pattern'

如果您的find支持-printf而您的xargs支持-0,或

find / -type f -print0 | xargs -0 grep 'pattern'

如果您的find仅支持-print0而您的xargs支持-0。在所有其他情况下,回到

find / -type f | xargs grep 'pattern'

这是最大程度兼容的,但需要注意的是某些不寻常的文件名将无法被删除,并且精心设计的文件名可能会带来安全风险。

请注意,您必须是root用户才能确保搜索所有文件,并且除非您将-i添加到grep,否则搜索将区分大小写。

答案 2 :(得分:2)

此?

find . -exec grep -H "hello" {} \;