grep:查找包含单词`star`但不包含单词`start`的所有文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep:查找包含单词`star`但不包含单词`start`的所有文件相关的知识,希望对你有一定的参考价值。

我有一堆文件:一些包含单词star,一些包含单词start,一些包含两者。

我想grep包含单词star的文件,但不是单词start

如何只使用grep实现这一目标?

答案

grep有一些选项可以在行或文件级别反转匹配。你需要后一种选择,使用-L开关。以下将打印文件夹中不包含文本start的所有文件的名称:

grep -LF start *

-F告诉grep,start是一个字符串而不是正则表达式。它在这里是可选的,但可能会加速一点点。

您可以使用结果列表来搜索包含star的文件:

grep -lF star $(grep -LF start *)

-l仅打印包含匹配项的文件名,而不是任何逐行或逐个匹配的详细信息。如果这不是你想要的,man grep是你的朋友。

这使用额外的shell构造来运行反向匹配,但它在技术上不会调用任何不是grep的其他程序。

更新

由于您提到要查看以给定根文件夹开头的所有文件,请将-LF更改为-LFr。如果您不想更改工作目录,请将*替换为您的根文件夹。

-r告诉grep递归目录,并搜索它在路上找到的每个文件。

另一答案

使用GNU grep for -w

$ cat file
foo star bar
oof start rab

$ grep -w star *
foo star bar

或者如果您只想要包含star的文件的名称:

$ grep -lw star *
file

并找到要查看的文件:

$ find . -maxdepth 1 -type f -exec grep -w 'star' {} ;
foo star bar

以上是关于grep:查找包含单词`star`但不包含单词`start`的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

58. 最后一个单词的长度

我想grep grep一个有空格的单词[复制]

如何使用 grep 命令获取连续有六个或更多辅音的单词列表?

有两个元音的 Grep 单词

查找 3 个 C++ 中的 1 个集合唯一的单词

如何使用 sed/grep 提取两个单词之间的文本?