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

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

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

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

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

grep
2个回答
1
投票

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递归目录,并搜索它在路上找到的每个文件。


0
投票

使用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
© www.soinside.com 2019 - 2024. All rights reserved.