如何用find+exec命令查找含指定字符串的文件并显示文件名与行
解决办法
给grep加个-H参数就能同时显示文件名和匹配行,它会强制在匹配内容前标注对应的文件名,不管grep处理单个还是多个文件:
find . -name "*.txt" -exec grep -H 'EOF' {} \;
还有个更高效的写法,用find的{} +语法把所有符合条件的txt文件一次性传给grep,这时grep因为处理多个文件,默认就会自动显示文件名:
find . -name "*.txt" -exec grep 'EOF' {} +
为啥之前的命令不符合需求?
- 第一次用的
grep 'EOF' {} \;,因为find每次只传一个文件给grep,grep处理单个文件时默认不显示文件名,所以只输出匹配行。 - 第二次加了
-print,会把所有找到的txt文件名都打印出来,不管文件里有没有"EOF",所以不符合只显示匹配文件的要求。
内容的提问来源于stack exchange,提问作者Carla
相关产品推荐
相关产品推荐

