mtk*_*mtk 40 grep find file-search
我想递归且唯一地列出包含给定单词的文件。
示例:检查单词“check”,我通常做的是一个 grep
$ grep check * -R
Run Code Online (Sandbox Code Playgroud)
但是由于这个词出现的次数很多,我得到了很多输出。所以我只需要列出包含给定搜索词的文件名。我猜有些招用find
和xargs
会在这里就够了,但不知道。
有任何想法吗?
N.N*_*.N. 52
使用记录如下的-l
or--files-with-matches
选项:
抑制正常输出;而是打印通常会打印输出的每个输入文件的名称。扫描将在第一场比赛中停止。(
-l
由 POSIX 指定。)
因此,例如,您可以使用以下内容:
$ grep check * -lR
Run Code Online (Sandbox Code Playgroud)
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 开头的文件出现问题-
),避免在参数后传递选项,因为这不能保证工作取决于环境,不可移植。