Linux/UNIX递归搜索所有文件中的字符串

时间:2020-01-09 10:40:36  来源:igfitidea点击:

如何在UNIX/Linux/* BSD/Mac OS X Shell提示符下以递归方式在所有文本文件中搜索foo等字符串?
您可以使用grep命令或find命令,如下所示。

grep命令:以递归方式在所有文件中搜索字符串

语法为:

cd /path/to/dir
grep -r "word" .
grep -r "string" .

要忽略大小写区别:

grep -ri "word" .

要只显示使用GNU grep的文件名,请执行:

grep -r -l "foo" .

您还可以指定目录名称:

grep -r -l "foo" /path/to/dir/*.c

find命令:以递归方式在所有文件中搜索字符串

建议使用find命令,因为它具有处理空格的文件名的速度和能力。

cd /path/to/dir
find . -type f -exec grep -l "word" {} +
find . -type f -exec grep -l "seting" {} +
find . -type f -exec grep -l "foo" {} +
find /search/dir/ -type f -name "*.c" -print0 | xargs -I {} -0 grep "foo" "{}"
 
## Search /etc/ directory for 'nameserver' word in all *.conf files ##
find /etc/ -type f -name "*.conf" -print0 | xargs -I {} -0 grep "nameserver" "{}"

较旧的UNIX版本应使用xargs加快速度:

find /path/to/dir -type f | xargs grep -l "foo"

最好传递-print0选项来查找可以处理包含空格或其他元字符的文件名的命令:

find /path/to/dir -type f -print0 | xargs -0 grep -l "foo"

或使用以下OSX/BSD/find或GNU/find示例:

find /path/to/dir/ -type f -name "file-pattern" -print0 | xargs -I {}  -0 grep -l "search-term" "{}"
 
## 或者
find /mycool/project/ -type f -name "*.py" -print0 | xargs -I {}  -0 grep -H --color "methodNameHere" "{}"
 
## OR search all files in /etc/ dir for 'nameserver' word ##
find /etc/ -iname "*" -type f -print0  |  xargs -0 grep -H "nameserver"