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"