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

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

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

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

$ grep check * -R

但由于这个词出现很多次,所以我得到了很多输出。所以我只需要列出包含给定搜索词的文件名。我想用find和来处理一些技巧xargs就足够了,但不确定。

有任何想法吗?

答案1

使用-l--files-with-matches选项,记录如下:

抑制正常输出;相反,打印通常会打印输出的每个输入文件的名称。扫描将在第一个匹配处停止。 (-l由 POSIX 指定。)

因此,对于您的示例,您可以使用以下内容:

$ grep check * -lR

答案2

find . -type f -exec grep -l check {} +

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

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

否则,你可以这样做:

grep -rl check .

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

答案3

尝试这个:

find . -type f | xargs grep -c check $1 | grep -v ":0"

至于grep旗帜...

-c将返回一个文件名,后跟 : 和一个数字,指示搜索字符串在给定文件中出现的次数。

-v将获取第一次搜索的输出grep,过滤掉结果为零的文件,并仅打印结果非零的文件。

答案4

grep -rin“whatToFind”locationToFINd

例如 $ grep -rin "vihaan" 。

将递归搜索并列出文件名以及其中包含“vihaan”、“.”的相应行。指当前目录。

相关内容