grep:查找所有包含单词“ star”而不是单词“ start”的文件

时间:2018-07-23 02:45:48

标签: grep

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

我想复制包含单词star但不包含单词start的文件。

仅使用grep如何实现?

2 个答案:

答案 0 :(得分: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递归到目录中,并搜索沿途找到的每个文件。

答案 1 :(得分:0)

使用-w的GNU grep:

$ 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