如何将“find”与“grep”结合使用来获取文件内的特定信息并包含找到信息的文件名?

问题描述 投票:0回答:2

我非常熟悉将 find 与 -exec 结合使用,事实上,它已成为我个人最喜欢的 BASH 命令之一,因为它在视觉上看起来很酷,而且功能强大且有用。

我需要找到 VPS 上某些文件中包含的字符串,目录结构太大了,我无法手动浏览并查找包含该字符串的文件,所以我认为 find -exec grep 是一个完美的工作.

我的命令的完整语法如下:

find ./ -type f -name "*.*" -exec grep "section for more information." {} \;

...这对于确认该字符串确实在某些文件中找到非常有用...但是哪些文件呢?我很想知道是否有一种语法可以显示 which 文件包含该字符串,最好是包含它们的完整路径,尽管我猜这不是强制性的。

提前致谢!

linux bash grep find
2个回答
3
投票
仅当您指定多个文件名时,

POSIX

grep
才会输出文件名。因此,典型的技巧是添加
/dev/null
以确保始终大于 1:

find ./ -type f -name "*.*" -exec grep "for more information." /dev/null {} \;

GNU 和 BusyBox

grep
另外还有一个
-H
您可以使用:

   -H, --with-filename
          Print the file name for each match.  This is the default
          when there is more than one file to search.

或者,如果您不关心匹配的行本身而只想要文件名:

find ./ -type f -name "*.*" -exec grep -q "for more information." {} \; -print

0
投票

不知道为什么接受上面的答案,因为它似乎没有解决你原来的问题,但这实际上是有效的。

find . -type f | while read f;do grep -q "for more information." "$f" && echo "$f" || true;done
© www.soinside.com 2019 - 2024. All rights reserved.