grep:查找所有包含“星”字的文件,但不包括“开始”字`

grep:查找所有包含“星”字的文件,但不包括“开始”字`,grep,Grep,我有一堆文件:一些包含单词star,一些包含单词start,一些包含两者 我想grep查找包含单词star,但不包含单词start的文件 仅使用grep如何实现这一点?grep有一些选项可用于在行或文件级别反转匹配。您需要后一个选项,带有-L开关。以下内容将打印文件夹中不包含文本start的所有文件的名称: grep -LF start * -F告诉grepstart是一个文本字符串,而不是正则表达式。这是可选的,但可能会加快一点速度 您可以使用生成的列表搜索包含星号的文件: grep -lF

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

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


仅使用grep如何实现这一点?

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

grep -LF start *
-F
告诉grep
start
是一个文本字符串,而不是正则表达式。这是可选的,但可能会加快一点速度

您可以使用生成的列表搜索包含星号的文件:

grep -lF star $(grep -LF start *)
$ grep -lw star *
file
-l
只打印包含匹配项的文件名,不打印任何逐行或逐匹配项的详细信息。如果这不是你想要的,那么曼格瑞普就是你的朋友

这使用了一个额外的shell构造来运行反向匹配,但从技术上讲,它不会调用任何不是
grep
的额外程序

更新

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


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

使用GNU grep查找
-w

$ cat file
foo star bar
oof start rab

$ grep -w star *
foo star bar
或者,如果您只需要包含
star
的文件名:

grep -lF star $(grep -LF start *)
$ grep -lw star *
file
只需查找要查找的文件:

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

startIs上的反向匹配将两个grep管道连接在一起作弊?请提供简洁、可测试的示例输入和预期输出,因为不同的人以不同的方式解释您的文本。包括一个仅包含
star
的文件,一个仅包含
start
的文件,以及一个同时包含两者的文件。现在我们不知道您在文件中搜索什么,也不知道输出应该是什么(文件名、匹配行,两者都是,还是其他什么?),缺少这些信息会有很大帮助。感谢您的反馈!太近了
grep-LF start*
抛出许多错误(vis.
grep:foo:是一个目录
)。有没有办法摆脱这些?@StudentsTea您是想查看
foo/
中的文件,还是只想将文件直接放在当前目录中?@StudentsTea。两条路。最好的方法就是把你感兴趣的文件的实际列表传进去。您仍然可以使用通配符:例如
*.txt
。您可以使用
2>/dev/null
等来抑制错误。如果您确实想查看这些文件夹,请将
-r
添加到您的标志中。然后将
-r
选项添加到内部
grep
@madpysicator以抑制错误,请使用
-s
选项。。。我建议使用
grep-rLZ'start'| xargs-0 grep-l'star'
来避免由于文件名包含空格、换行符等引起的问题。。。另外,值得一提的是,
grep-rwl'star'
将匹配整个单词star,但不匹配像start、starry、芥末等这样的单词。但是当同一个文件也包含
start
时,如何从列表中丢弃该文件呢?具体来说,OP的声明要求是“grep用于包含单词star但不包含单词start的文件。”显然,我们对需求的解释有所不同。我不认为OP想要排除包含单词
start
的文件,我认为她只是说她想要找到单词
star
,但不是当它是另一个单词的一部分时,比如
start
。我会要求提供一些输入/输出示例(在发布答案之前,我们首先应该这样做:-()。如果你这样说,这是有道理的。