列出文本中包含特定单词的文件

mtk*_*mtk 40 grep find file-search

我想递归且唯一地列出包含给定单词的文件。

示例:检查单词“check”,我通常做的是一个 grep

$ grep check * -R
Run Code Online (Sandbox Code Playgroud)

但是由于这个词出现的次数很多,我得到了很多输出。所以我只需要列出包含给定搜索词的文件名。我猜有些招用findxargs会在这里就够了,但不知道。

有任何想法吗?

N.N*_*.N. 52

使用记录如下的-lor--files-with-matches选项:

抑制正常输出;而是打印通常会打印输出的每个输入文件的名称。扫描将在第一场比赛中停止。(-l由 POSIX 指定。)

因此,例如,您可以使用以下内容:

$ grep check * -lR
Run Code Online (Sandbox Code Playgroud)

  • 我使用了`grep -rl "text to find" "/usr/share"`,效果很好! (6认同)

Sté*_*las 19

find . -type f -exec grep -l check {} +
Run Code Online (Sandbox Code Playgroud)

您可能不想使用-R现代版本的 GNUgrep在降序目录时遵循符号链接的选项。改用该-r选项,因为版本 2.12(2012 年 4 月)不再遵循符号链接。

如果您的 grep 不是 GNU 版本,或者版本低于 2.12,或者您需要将代码移植到非 bleeding-edge-GNU 系统,请使用find上面的命令。

否则,你可以这样做:

grep -rl check .
Run Code Online (Sandbox Code Playgroud)

不要使用*(因为这会忽略当前目录中的隐藏文件(并且仅在当前目录中)并且会导致名称以 a 开头的文件出现问题-),避免在参数后传递选项,因为这不能保证工作取决于环境,不可移植。